彩票走势图

使用Aspose.Cell控件实现多个Excel文件的合并

转帖|其它|编辑:郝浩|2011-08-23 14:50:44.000|阅读 644 次

概述:之前有写过多篇关于使用Apose.Cell控件制作自定义模板报表和通用的导出Excel表格数据的操作,对这个控件的功能还是比较满意,而且也 比较便利。忽然有一天,一个朋友说:你已经有生成基于自定义模板报表了,可是我每个单位都导出一张相同的报表的话,我岂不是要生成很多文件,而且对比查看 也不方便,有没有更好的办法合并他们到一个文件里面呢?这样我看报表就方便很多了。本文主要介绍如何实现基于一个自定义报表模式,生成多个类似报表合并在 一个文件中具体操作。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

   之前有写过多篇关于使用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重新保存为另外一个文件即可。 

  首先我通过一个简单例子来介绍实现思路,先来设计一个简单的自定义模板,如下所示 。

   

   这样,我们通过基于该自定义模板,生成一系列相似的报表文件,然后逐一合并他们即可,例子实现的代码如下所示:

        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。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP