← 返回所有博客文章

本文介绍使用C1实现与微软Excel的交互。

不需要安装Microsoft Excel,可以用C1简单的命令来加载工作簿、操作工作表,然后将工作簿保存到一个Excel文件。它用过程C1XLBook对象在代码中把握Excel文件,可以将任何数据从应用中转换到Excel里。OpenXML格式使得它支持对更小的、压缩的XLSX文件进行保存。

在本文Demo中,就用C1XLBook导入Excel文件作为C1Chart的数据源。可以在运行时在左边面板选择不同的Excel文件,导入到C1XLBook中并读取其中的数据,效果如下图所示:

excel-import

要实现上面的功能,就需要从Excel中读取数据,那么实现步骤如下。

首先从工具箱拖拽或用代码创建一个C1XLBook,在C1XLBook中加载或创建一个Excel工作簿。其代码如下:

C1XLBook _xlBook = new C1XLBook();

_xlBook.Load(AppDomain.CurrentDomain.BaseDirectory+ filename);

 

接着,在C1XLBook上加载的Excel后,就可以访问工作表的数据,这些数据是一个由行、列和单元格组成的简单的表格。本文Demo中需要的数据有四个:电导、压力、温度和Ph,操作单元格得到数据的代码如下所示:

DrillDataPoints GetChartData(C1XLBook book)
        {
            // Get first sheet
            var sheet = book.Sheets[0];

            // Get location, date, and cell count
            var location = sheet[1, 1].Value as string;
            var date = (DateTime)sheet[2, 1].Value;
            var count = sheet.Rows.Count - 5;
            label.Text = string.Format("{0}, {1} points", location, count);

            // Get values into arrays for charting
            var drillData = new DrillDataPoints(count);
            for (int r = 0; r < count; r++)
            {
                drillData.Temperature[r] = (double)sheet[r + 5, 1].Value;
                drillData.Pressure[r] = (double)sheet[r + 5, 2].Value;
                drillData.Conductivity[r] = (double)sheet[r + 5, 3].Value;
                drillData.Ph[r] = (double)sheet[r + 5, 4].Value;
                drillData.Depth[r] = r;
            }
            drillData.ScaleValues();

            // Send data to chart
            return drillData;
        }

 

还可以来导出XLS文件或 XLSX文件。如,C1Chart控件,它可以使用C1XLBook来生成报告与Excel兼容的版本。

导出的Save方法如下所示:

        //   fileName:	Name of the file to save.
        //   stream:	System.IO.Stream where the worksheet is saved.
        //   format:    C1.C1Excel.C1XLBook.FileFormat value that specifies the format to save 	//		the worksheet in.
        // 概要:
        //     Saves the worksheet into a stream.
        public void Save(Stream stream);
        //
        // 概要:
        //     Saves the worksheet to a file.
        public void Save(string fileName);
        //
        // 概要:
        //     Saves the worksheet into a stream.
        public void Save(Stream stream, FileFormat format);
        //
        // 概要:
        //     Saves the worksheet to a file.
        public void Save(string fileName, FileFormat format);

 

 

本文Demo的源代码如下:

Chart_InteractionDemo.7z (1.90 mb)

本文的相关博文:创建C1Chart图表实现交互能力