0

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

这是两个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);
4

2 回答 2

1

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

//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 个数据表 - 一个 fromsheet2和一个 from sheet1

于 2018-08-02T12:28:58.110 回答
1

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

您需要insertDataTable使用两个单独的数据表运行两个单独的命令,每张表一个:

//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);

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

于 2018-08-02T12:30:07.580 回答