【问题标题】:How to merge 3 Sheets from different Excel files into one sheet with C#如何使用 C# 将不同 Excel 文件中的 3 张工作表合并为一张工作表
【发布时间】:2018-08-02 12:21:11
【问题描述】:

在这里,我尝试使用下面提到的代码(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);

【问题讨论】:

  • 没有合并第三个文件。您没有将其中的数据导出到 DataTable 中并且没有将其插入到目标中。
  • 我建议您在尝试修改代码之前尝试了解代码的作用。然后尝试clean它——如果你需要将两张或更多张合并为一张,为什么不把它变成一个循环呢?
  • @Panagiotis Kanavos 谢谢先生的快速回复。但是同样的逻辑也适用于上面提到的两个 excel 合并代码。我没有将第二个文件(即 sheet1)导出到 DataTable,但它工作正常。
  • @vinodkarampuri 但问题是您没有在代码中正确应用逻辑......请参阅我的答案(或其他答案)。了解逻辑是一回事,实现它是另一回事。

标签: c# .net excel spire.xls


【解决方案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 个数据表——一个来自sheet2,一个来自sheet1

【讨论】:

    【解决方案2】:

    您只插入来自workbook2 的工作表,所以这并不奇怪。你从workbook3 获得了datatable,但随后立即用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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2017-09-09
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多