如何将多个Excel文件合并到一个Excel文件中

所以我试图做一个Excel表格聚合器。 在我的工作中,我们得到了一些给我们发送了一堆单独的excel文件的人,这些文件都只有一张使用过,

我曾经在一定程度上关注了这个以前的post的想法 。 但是在这样做的时候,我抄的一些excel表都是空白的。 只有某些人。 我不知道为什么有些是空白的,其他的都不错。

这里是我用来打开和复制excel文件的代码

OpenFileDialog browse = new OpenFileDialog(); browse.Multiselect = true; DialogResult result = browse.ShowDialog(); if (result == DialogResult.OK) try //try to open it. If its a proper excel file { excel = new Excel.Application(); excel.Workbooks.Add(""); finalized = excel.Workbooks[1]; excel.SheetsInNewWorkbook = 1; for(int i=0; i< browse.FileNames.Length; i++) { excel.Workbooks.Add(browse.FileNames[i]); } //skip the first workbook as it is the finalized one //also note everything in excel starts at 1 and not 0 for(int i=2; i<excel.Workbooks.Count; i++) { int count = excel.Workbooks[i].Worksheets.Count; excel.Workbooks[i].Activate(); for (int j = 1; j < count; j++) { Excel._Worksheet pastee = (Excel._Worksheet)excel.Workbooks[i].Worksheets[j]; Excel._Worksheet sheet = (Excel._Worksheet)finalized.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); //Excel._Worksheet sheet = finalized.Sheets[1]; pastee.Copy(Before: sheet); }//end of for j }//end of for i }//end of try 

这里是我用来保存Excel文件的代码

  SaveFileDialog browse = new SaveFileDialog(); browse.Title = "Save as Excel"; browse.Filter = "Excel workbook | *.xlsx"; DialogResult result = browse.ShowDialog(); finalized.SaveAs(browse.FileName, Excel.XlFileFormat.xlWorkbookDefault); MessageBox.Show("Success", "Message"); //unlock the file Global.releaseComObjects(finalized, excel); 

在内部循环中,将新的工作表添加到“最终化的”工作簿(“工作表”)中,然后为每个源表复制工作表。 因此,您的“ Add命令创build的每个“工作表”都将为空,因为实际上您会为每个源表创build两个工作表。 另外一个问题是,正如你所提到的,excel中的数组是基于1的; 所以你必须循环,直到j <= count不是j < count

所以我认为这个代码会更好:

 Excel.Worksheet dummy = finalized.Worksheets[1]; for (int i = 2; i <= excel.Workbooks.Count; i++) { int count = excel.Workbooks[i].Worksheets.Count; for (int j = 1; j <= count; j++) { Excel._Worksheet pastee = (Excel._Worksheet)excel.Workbooks[i].Worksheets[j]; pastee.Copy(dummy); } } dummy.Delete(); 

尝试下面的链接

如何将两个Excel文件合并到一个表名中?

http://www.codeproject.com/Tips/715976/Solutions-to-Merge-Multiple-Excel-Worksheets-int

将工作表合并到一个工作表中最简单的方法是通过称为Spire.Xls的第三部分组件。 这是一个独立的.NET组件。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Spire.Xls; using System.Data; namespace Spire.XLS { class Program { static void Main(string[] args) { Workbook workbook = new Workbook(); //load the first workbook workbook.LoadFromFile(@"merge1.xlsx"); //load the second workbook Workbook workbook2 = new Workbook(); workbook2.LoadFromFile(@"merge2.xlsx"); //import the second workbook's worksheet into the first workbook using a datatable Worksheet sheet2 = workbook2.Worksheets[0]; DataTable dataTable = sheet2.ExportDataTable(); Worksheet sheet1 = workbook.Worksheets[0]; sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1); //save the workbook workbook.SaveToFile("result.xlsx"); } } }