如何使用 C# 将来自不同 Excel 文件的 3 张合并为一个 sheet

How to merge 3 Sheets from different Excel files into one sheet with C#

在这里,我尝试使用下面提到的代码 (Spire.Xls dll) 将两个 excel 文件合并为一个 excel sheet,它工作正常。

这是两个 excel 合并的代码。

 workbook = new Workbook();
 //load the first workbook
 workbook.LoadFromFile(ArrayExcelFiles[0]);
 //load the second workbook
 Workbook workbook2 = new Workbook();
 workbook2.LoadFromFile(ArrayExcelFiles[1]);
 //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);

 workbook.SaveToFile(OutputPath + "Merged.xls", ExcelVersion.Version2007);

但问题是,当我尝试使用相同的逻辑合并三个 excel 文件时,输出与两个合并的 excel 输出相同,第三个 excel 未合并。

这是三个 excel 文件的代码。

Workbook workbook1 = new Workbook();
//load the first workbook
workbook1.LoadFromFile(ArrayExcelFiles[0]);
//load the second workbook
Workbook workbook2 = new Workbook();
workbook2.LoadFromFile(ArrayExcelFiles[1]);
//load the third workbook
Workbook workbook3 = new Workbook();
workbook3.LoadFromFile(ArrayExcelFiles[2]);

//import the second workbook's worksheet into the first workbook using a datatable
Worksheet sheet3 = workbook3.Worksheets[0];
DataTable dataTable = sheet3.ExportDataTable();
Worksheet sheet2 = workbook2.Worksheets[0];
dataTable = sheet2.ExportDataTable();
Worksheet sheet1 = workbook1.Worksheets[0];
sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1);
workbook1.SaveToFile(OutputPath + "Merged.xls", ExcelVersion.Version2007);

您在第二个示例中没有使用相同的逻辑,因此它不起作用。在第二个代码上尝试这样的事情或稍微改变一下:

//import the second workbook's worksheet into the first workbook using a datatable
Worksheet sheet3 = workbook3.Worksheets[0];

Worksheet sheet2 = workbook2.Worksheets[0];
DataTable dataTable2 = sheet2.ExportDataTable();

Worksheet sheet1 = workbook1.Worksheets[0];
DataTable dataTable1 = sheet1.ExportDataTable();

sheet3.InsertDataTable(dataTable2, false, sheet3.LastRow + 1, 1)
sheet3.InsertDataTable(dataTable1, false, sheet3.LastRow + 1, 1)

上面的代码接受 sheet3 并向其中插入 2 个数据表 - 一个来自 sheet2,一个来自 sheet1

您只能从 workbook2 插入 sheet,所以这不足为奇。你从 workbook3 得到了 datatable,但在你对它做任何其他事情之前,立即用来自 workbook2 的数据覆盖了它。您不能将两个表存储在一个 DataTable 对象中。最后一个简单地替换了第一个(就像任何其他变量赋值一样)。

您需要 运行 两个单独的 insertDataTable 命令和两个单独的数据表,每个 sheet:

//import the second and third workbooks' worksheets into the first workbook using a datatable
Worksheet sheet2 = workbook2.Worksheets[0];
DataTable dataTable = sheet2.ExportDataTable();

Worksheet sheet3 = workbook3.Worksheets[0];
DataTable dataTable2 = sheet3.ExportDataTable();

Worksheet sheet1 = workbook1.Worksheets[0];
sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1);
sheet1.InsertDataTable(dataTable2, false, sheet1.LastRow + 1, 1);
workbook1.SaveToFile(OutputPath + "Merged.xls", ExcelVersion.Version2007);

当然可以通过使用循环等使代码更简洁、重复更少,但这是基本解决方案。