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

简介:

之前有写过多篇关于使用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。

本文转自博客园伍华聪的博客,原文链接:使用Aspose.Cell控件实现多个Excel文件的合并,如需转载请自行联系原博主。



目录
相关文章
|
10天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
67 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
34 6
按条件将Excel文件拆分到不同的工作表
|
1月前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
48 6
|
1月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
42 6
|
2月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
37 1
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
101 4
|
3月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
151 6
|
3月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
3月前
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
268 16
|
3月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
176 2