C#合并多个结构一样的Excel

有多个结构一样的Excel,带复杂表头需要合并为一个,且去掉多余的表头数据,可以用COM组件来读取每个Excel表格的Range来合并到一个新的表格中。样例如图

有很多相同格式的表格,合并代码如下:

1.using  System;
2.using  System.Collections.Generic;
3.using  System.Text;
4.using  System.Reflection;
5.using  Excel = Microsoft.Office.Interop.Excel;
6.namespace  ConsoleApplication20
7.{
8.     //添加引用-COM-MicroSoft Excel 11.0 Object Libery
9.     class  Program
10.    {
11.         static   void  Main( string [] args)
12.        {
13.             //M为表格宽度标志(Excel中的第M列为最后一列),3为表头高度
14.            MergeExcel.DoMerge( new   string []
15.            {
16.                @ "E:\excel\类型A\公司A.xls" ,
17.                @ "E:\excel\类型A\公司B.xls"
18.            },
19.                @ "E:\excel\类型A\合并测试.xls" ,  "M" , 3);
20.            MergeExcel.DoMerge( new   string []
21.            {
22.                @ "E:\excel\类型B\统计表A.xls" ,
23.                @ "E:\excel\类型B\统计表B.xls"
24.            },
25.                @ "E:\excel\类型B\合并测试.xls" ,  "I" , 4);
26.        }
27.
28.
29.
30.
31.    }
32.     public   class  MergeExcel
33.    {
34.
35.        Excel.Application app =  new  Microsoft.Office.Interop.Excel.ApplicationClass();
36.         //保存目标的对象
37.        Excel.Workbook bookDest =  null ;
38.        Excel.Worksheet sheetDest =  null ;
39.         //读取数据的对象
40.        Excel.Workbook bookSource =  null ;
41.        Excel.Worksheet sheetSource =  null ;
42.
43.
44.         string [] _sourceFiles =  null ;
45.         string  _destFile =  string .Empty;
46.         string  _columnEnd =  string .Empty;
47.         int  _headerRowCount = 1;
48.         int  _currentRowCount = 0;
49.
50.         public  MergeExcel( string [] sourceFiles, string  destFile, string  columnEnd, int  headerRowCount)
51.        {
52.
53.            bookDest = (Excel.WorkbookClass)app.Workbooks.Add(Missing.Value);
54.            sheetDest = bookDest.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value)  as  Excel.Worksheet;
55.            sheetDest.Name =  "Data" ;
56.
57.            _sourceFiles = sourceFiles;
58.            _destFile = destFile;
59.            _columnEnd = columnEnd;
60.            _headerRowCount = headerRowCount;
61.
62.        }
63.         /// <summary>
64.         /// 打开工作表
65.         /// </summary>
66.         /// <param name="fileName"></param>
67.         void  OpenBook( string  fileName)
68.        {
69.            bookSource = app.Workbooks._Open(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value
70.                , Missing.Value, Missing.Value, Missing.Value, Missing.Value
71.                , Missing.Value, Missing.Value, Missing.Value, Missing.Value);
72.            sheetSource = bookSource.Worksheets[1]  as  Excel.Worksheet;
73.        }
74.         /// <summary>
75.         /// 关闭工作表
76.         /// </summary>
77.         void  CloseBook()
78.        {
79.            bookSource.Close( false , Missing.Value, Missing.Value);
80.        }
81.         /// <summary>
82.         /// 复制表头
83.         /// </summary>
84.         void  CopyHeader()
85.        {
86.            Excel.Range range = sheetSource.get_Range( "A1" , _columnEnd + _headerRowCount.ToString());
87.            range.Copy(sheetDest.get_Range( "A1" ,Missing.Value));
88.            _currentRowCount += _headerRowCount;
89.        }
90.         /// <summary>
91.         /// 复制数据
92.         /// </summary>
93.         void  CopyData()
94.        {
95.             int  sheetRowCount = sheetSource.UsedRange.Rows.Count;
96.            Excel.Range range = sheetSource.get_Range( string .Format( "A{0}" , _headerRowCount + 1), _columnEnd + sheetRowCount.ToString());
97.            range.Copy(sheetDest.get_Range( string .Format( "A{0}" , _currentRowCount + 1), Missing.Value));
98.            _currentRowCount += range.Rows.Count;
99.        }
100.         /// <summary>
101.         /// 保存结果
102.         /// </summary>
103.         void  Save()
104.        {
105.            bookDest.Saved =  true ;
106.            bookDest.SaveCopyAs(_destFile);
107.        }
108.         /// <summary>
109.         /// 退出进程
110.         /// </summary>
111.         void  Quit()
112.        {
113.            app.Quit();
114.        }
115.         /// <summary>
116.         /// 合并
117.         /// </summary>
118.         void  DoMerge()
119.        {
120.             bool  b =  false ;
121.             foreach  ( string  strFile  in  _sourceFiles)
122.            {
123.                OpenBook(strFile);
124.                 if  (b ==  false )
125.                {
126.                    CopyHeader();
127.                    b =  true ;
128.                }
129.                CopyData();
130.                CloseBook();
131.            }
132.            Save();
133.            Quit();
134.        }
135.         /// <summary>
136.         /// 合并表格
137.         /// </summary>
138.         /// <param name="sourceFiles">源文件</param>
139.         /// <param name="destFile">目标文件</param>
140.         /// <param name="columnEnd">最后一列标志</param>
141.         /// <param name="headerRowCount">表头行数</param>
142.         public   static   void  DoMerge( string [] sourceFiles,  string  destFile,  string  columnEnd,  int  headerRowCount)
143.        {
144.             new  MergeExcel(sourceFiles, destFile, columnEnd, headerRowCount).DoMerge();
145.        }
146.    }
147.
148.}
149.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索excel
, string
, missing
, value
, excel C# copy
, excel C# copy的问题
, void
表头
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-21 23:00:26

C#合并多个结构一样的Excel的相关文章

java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件,颜色会出错

问题描述 java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件,颜色会出错 程序代码如下: public class Main { public static void main(String[] args) { try { InputStream fis1 = new FileInputStream("D:/fei/testfiles/2G囤卡量.xls"); InputStream fis2 = new FileInputStream(&quo

java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件

问题描述 java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件 java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件有3个list 解决方案 当个excel文件是只有一个sheet的吗,如果是的话,可以逐个遍历Excel文件,获取这个文件的sheet后,直接添加到一个空白excel文档中就可以了. 了解下jxl的api,这个需求实现应该不复杂的.

asp.ent下合并两个结构相同的DataTable_实用技巧

写了个函数. 复制代码 代码如下: /// <summary> /// 合并两个相同的DataTable,返回合并后的结果 /// </summary> /// <param name="dt1"></param> /// <param name="dt2"></param> /// <returns></returns> public DataTable Combine

即刻盘古合并后遗症:结构不明晰 员工出走

在经历野蛮式生长之后,中国互联网正进入疯狂的并购期.在这场由BAT发起的并购战役中,一场发生在人们视野之外发生的小小合并,却因为两家企业的"国家队"背景引发了更多关注.在3月底,盘古搜索与即刻搜索合并后的中国搜索宣布上线,这个国字号搜索与普通商业搜索相比增加了国情.理论等垂直搜索内容.此前的即刻搜索(原人民搜索)以及盘古搜索都正式宣告结束,用户访问上述两家网站中的任何一家都会跳转到新上线的中国搜索.不过,中国搜索对于外界而言显得格外神秘,无论是公关还是中层都难以接触,甚至连企业的管理架

Excel中合并单元格的几种方法及合并单元格快捷键

  Excel中合并单元格的几种方法及合并单元格快捷键          如下图所示,希望将A1到E1,这之间所有单元格合并成一个大单元格操作方法如下: 合并单元格方法一:利用格式菜单上的"合并及居中"按钮合并单元格 ①首先,选中A1.B1.C1.D1.E1这些单元格; ②然后单击"格式"工具栏上面的"合并及居中"按钮; 此时,这几个单元格就已经合并成了一个大单元格了,是不是很简单呀. 合并单元格方法二:利用"设置单元格格式"

excel合并单元格快捷键是什么

  excel合并单元格快捷键是什么          excel合并单元格快捷键需要用以下方法设置: 1.打开excel,选择工具--点击"自定义".这时会出现一个"自定义"表单.不要理会这个表单,上面没有可供选择的项目. 2.右键点击"合并单元格"的图标.发现没有,和平时右击不一样了! 3.选择"总是只用文字"选项.这时平时用来合并的按钮就变成了"合并及居中(M)",这个(M)就是你想要的快捷方式了,现

合并多个Excel工作表最简单方法

  如果你用的是Office2016的话,其自带的Power Query就能完美解决,但若是Office2007~2013版的话,就需要去微软官方网站下载了(下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=39379). 扯了这么多,看看怎么用它最简单的完成合并工作. 从Excel数据项目中,点击"新建查询-从文件-从工作簿"后选取需要制作的表格后,在"导航器选取需要合并的多个工作表,点击"

Excel中合并单元格的快捷键方法

1.首先,我们打开Excel表格,然后看看整个菜单栏中的栏目,如图所示: 2.在我们打开表格之后,然后我们点击菜单栏中的"工具",然后选择该选项中的"自定义",如图所示: 电脑教程 3.在我们选择"自定义"之后,就会发现弹出一个窗口,但是这个窗口对我们来说,不需要做任何的点击.然后我们找到工具栏,在居中并对其图标上单击鼠标右键,将会弹出下拉菜单,然后选择"总是文字",如图所示: 4.在选择"总是只用文字"之

excel合并单元格在哪设置?exl合并单元格快捷键

  使用office办公软件的朋友们很多不知道excel合并单元格在哪设置,其实不难非常简单,有什么excel合并单元格快捷技巧呢?小编就为大家带来exl合并单元格快捷键. excel合并单元格在哪设置?exl合并单元格快捷键 如图我们可以看到长数据内容写不下一个单元格. 这里我们需要选中所有需要合并的单元格,如图所示合并按钮(根据自己意愿选择) 然后多个单元格就合并成功了. excel合并单元格在哪设置?exl合并单元格快捷键就为大家介绍到这里,更多软件教程欢迎关注第九软件网.