使用Aspose.Cell控件实现多个Excel文件的合并
2017-07-12 10:09
489 查看
之前有写过多篇关于使用Apose.Cell控件制作自定义模板报表和通用的导出Excel表格数据的操作,对这个控件的功能还是比较满意,而且也比较便利。忽然有一天,一个朋友说:你已经有生成基于自定义模板报表了,可是我每个单位都导出一张相同的报表的话,我岂不是要生成很多文件,而且对比查看也不方便,有没有更好的办法合并他们到一个文件里面呢?这样我看报表就方便很多了。本文主要介绍如何实现基于一个自定义报表模式,生成多个类似报表合并在一个文件中具体操作。
查询Apose.Cell控件的使用介绍,WorkBook对象确实有一个Combine的方法,专门做文件合并的工作,实现的代码如下所示。
复制代码
Workbook SourceBook1 = new Workbook();
SourceBook1.Open(“c:\excels\ChartTest.xls”);
Workbook SourceBook2 = new Workbook();
SourceBook2.Open(“C:\excels\PictureTest.xls”);
SourceBook1.Combine(SourceBook2);
SourceBook1.Save(“c:\excels\combined.xls”);
复制代码
既然有了这个方法合并文件,那么客户提出的问题,就也可以通过该思路来解决了。问题只是这个方法合并已有的文件,而客户需要的是在一个自定义模板的基础上生成多个相似的报表,放到一个文件中,每个报表一个Sheet而已。
SourceBook1.Combine(SourceBook2);
SourceBook1.Save(“c:\excels\combined.xls”);
通过以上的代码,我们可以看到,文件合并的逻辑,其实是多个WorkBook之间的合并,然后把最后的WorkBook重新保存为另外一个文件即可。
首先我通过一个简单例子来介绍实现思路,先来设计一个简单的自定义模板,如下所示 。
这样,我们通过基于该自定义模板,生成一系列相似的报表文件,然后逐一合并他们即可,例子实现的代码如下所示:
复制代码
复制代码
注意,由于Workbook对象默认只创建了一个Sheet对象供使用,因此要逐一修改Sheet对应的名称,如下代码所示:
designer.Workbook.Worksheets[0].Name = “test” + i.ToString();
最终生成的多Sheet对象的Excel报表效果如下图所示:
当然,复杂的报表可能相对处理会更加复杂一些,不过大致的逻辑就是通过这样的步骤来实现整合即可,在项目中整合 真正的报表后,对方满意,一切OK。
查询Apose.Cell控件的使用介绍,WorkBook对象确实有一个Combine的方法,专门做文件合并的工作,实现的代码如下所示。
复制代码
Workbook SourceBook1 = new Workbook();
SourceBook1.Open(“c:\excels\ChartTest.xls”);
Workbook SourceBook2 = new Workbook();
SourceBook2.Open(“C:\excels\PictureTest.xls”);
SourceBook1.Combine(SourceBook2);
SourceBook1.Save(“c:\excels\combined.xls”);
复制代码
既然有了这个方法合并文件,那么客户提出的问题,就也可以通过该思路来解决了。问题只是这个方法合并已有的文件,而客户需要的是在一个自定义模板的基础上生成多个相似的报表,放到一个文件中,每个报表一个Sheet而已。
SourceBook1.Combine(SourceBook2);
SourceBook1.Save(“c:\excels\combined.xls”);
通过以上的代码,我们可以看到,文件合并的逻辑,其实是多个WorkBook之间的合并,然后把最后的WorkBook重新保存为另外一个文件即可。
首先我通过一个简单例子来介绍实现思路,先来设计一个简单的自定义模板,如下所示 。
这样,我们通过基于该自定义模板,生成一系列相似的报表文件,然后逐一合并他们即可,例子实现的代码如下所示:
复制代码
private DataTable GetCustomersTable() { DataTable dt = new DataTable("Customers"); dt.Columns.Add("Address"); dt.Columns.Add("City"); dt.Columns.Add("CompanyName"); dt.Columns.Add("ContactName"); dt.Columns.Add("ContactTitle"); dt.Columns.Add("Country"); dt.Columns.Add("CustomerID"); dt.Columns.Add("Fax"); dt.Columns.Add("Phone"); dt.Columns.Add("PostalCode"); dt.Columns.Add("Region"); for (int i = 0; i < 10; i++) { DataRow row = dt.NewRow(); for (int j = 0; j < dt.Columns.Count; j++) { row[j] = dt.Columns[j].ColumnName + "(" + i.ToString() + "," + j.ToString() + ")"; } dt.Rows.Add(row); } return dt; } private void btnCombind_Click(object sender, EventArgs e) { Workbook SourceBook1 = new Workbook(); string path = System.IO.Path.Combine(Application.StartupPath, "SmartMarkerCombind.xls"); DataTable dt = GetCustomersTable();//使用DataTable对象 List<string> fileList = new List<string>(); for (int i = 0; i < 3; i++) { Workbook tempBook = new Workbook(); //创建设计模板对象,并绑定数据源 WorkbookDesigner designer = new WorkbookDesigner(); designer.Open(path); designer.SetDataSource(dt); designer.Process(); //修改Sheet的名称 designer.Workbook.Worksheets[0].Name = "test" + i.ToString(); //根据数据源和自定义模板,生成相应的报表Excel文件 string fileToSave = System.IO.Path.Combine(Application.StartupPath, string.Format("Combind{0}.xls", i)); designer.Save(fileToSave, FileFormatType.Excel2003); fileList.Add(fileToSave); //第一次要打开 if (i == 0) { SourceBook1.Open(fileToSave); } else { //第二个使用Combind函数操作 tempBook.Open(fileToSave); SourceBook1.Combine(tempBook); } } //最后将WorkBook保存为一个文件即可 string soucePath = System.IO.Path.Combine(Application.StartupPath, "Combind.xls"); SourceBook1.Save(soucePath); //删除临时文件 foreach (string file in fileList) { if (File.Exists(file)) { File.Delete(file); } } //打开文件 Process.Start(soucePath); } }
复制代码
注意,由于Workbook对象默认只创建了一个Sheet对象供使用,因此要逐一修改Sheet对应的名称,如下代码所示:
designer.Workbook.Worksheets[0].Name = “test” + i.ToString();
最终生成的多Sheet对象的Excel报表效果如下图所示:
当然,复杂的报表可能相对处理会更加复杂一些,不过大致的逻辑就是通过这样的步骤来实现整合即可,在项目中整合 真正的报表后,对方满意,一切OK。
相关文章推荐
- 使用Aspose.Cell控件实现多个Excel文件的合并
- 使用Aspose.Cell控件实现Excel高难度报表的生成
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)导出表格控件
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
- 使用Aspose.Cell控件实现Excel高难度报表的生成
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- (转)使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(三)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(三)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(三)
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出