如何使用openXML将两个工作表聚合到一个工作簿?

我想从另一个工作簿将两个不同的工作表聚合到一个工作簿,但是我不知道如何使用openXML来完成这个工作。 我只想用两个工作表创build一个工作簿。 我不需要合并工作表到一个。 如何使用openXML将两个工作表聚合到一个工作簿?

使用Epplus可以在Nuget中免费获得工作表的复制工作表。

就像这个例子一样,将工作表及其所有数据从一个工作簿复制到另一个工作表,而不需要任何单独的函数来遍历行来复制数据:

FileInfo fInfoSrc = new FileInfo(@"C:\Temp\Source.xlsx"); FileInfo fInfoDest = new FileInfo(@"C:\Temp\Destination.xlsx"); using (var source = new ExcelPackage(fInfoSrc)) { using (var destination = new ExcelPackage(fInfoDest)) { var srcWorksheet = source.Workbook.Worksheets["SourceWorksheet"]; var destWorksheet = destination.Workbook.Worksheets.Add("destinationWorksheetName", srcWorksheet); destination.Save(); } } 

您需要对OpenXml SDK的引用。 一个小例子,如何创build一个工作簿。 调用第二个方法AddWorksheet尽可能多的工作表。

  private static SpreadsheetDocument CreateWorkbook(Stream stream) { // Create the Excel workbook var spreadSheet = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, false); // Create the parts and the corresponding objects // Workbook spreadSheet.AddWorkbookPart(); spreadSheet.WorkbookPart.Workbook = new Workbook(); spreadSheet.WorkbookPart.Workbook.Save(); // Shared string table var sharedStringTablePart = spreadSheet.WorkbookPart.AddNewPart<SharedStringTablePart>(); sharedStringTablePart.SharedStringTable = new SharedStringTable(); sharedStringTablePart.SharedStringTable.Save(); // Sheets collection spreadSheet.WorkbookPart.Workbook.Sheets = new Sheets(); spreadSheet.WorkbookPart.Workbook.Save(); // Stylesheet var workbookStylesPart = spreadSheet.WorkbookPart.AddNewPart<WorkbookStylesPart>(); workbookStylesPart.Stylesheet = new Stylesheet(); workbookStylesPart.Stylesheet.Save(); return spreadSheet; } private static WorksheetPart AddWorksheet(SpreadsheetDocument spreadsheet, string name) { // Add the worksheetpart var worksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(new SheetData()); uint sheetId = 1; var sheets = spreadsheet.WorkbookPart.Workbook.GetFirstChild<Sheets>(); if (sheets.Elements<Sheet>().Any()) { sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1; } // Add the sheet and make relation to workbook var sheet = new Sheet { Id = spreadsheet.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = sheetId, Name = name }; sheets.Append(sheet); worksheetPart.Worksheet.Save(); spreadsheet.WorkbookPart.Workbook.Save(); return worksheetPart; } 

我select的最好的方法是打开目标文件,并在循环打开迭代源文件与工作表复制。 接下来,我使用深度模式的克隆节点方法克隆从源文件到目标文件的每一行。 这个克隆的行我插入目标文件工作表中的特定索引。

好的方法是使用EPPlus就像在这个问题的其他答案一样,但是当我用它的名字定义的名称(命名范围)的Excel文件它不能正常工作。