我有以下错误..。
System.Data.DuplicateNameException: 'A column named 'samplex' already
belongs to this DataTable.'我有大量的多个excel文件,需要合并成一个。但是所有的列名都是一样的。所以我想这就是为什么我会犯这个错误。
所有的数据都在sheet1中,每个excel文件都有一个。在网上搜索我找到的最好的一个是使用Spire.Xls,从这里获取的样本。
我的代码样本,使用控制台..。
using Spire.Xls;
::
::
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"filea.xlsx");
Workbook workbook2 = new Workbook();
workbook2.LoadFromFile(@"fileb.xlsx");
Workbook workbook3 = new Workbook();
workbook3.LoadFromFile(@"filec.xlsx");
Worksheet sheet2 = workbook3.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");如果有人能帮我做这件事很感激?
发布于 2017-07-23 08:35:28
当我使用Microsoft.Office.Interop.Excel (从这里获取的示例)时,它解决了有关同名列的问题。代码是长而复杂的,但它可以工作,但您需要在机器上使用Microsoft。只有一个小问题是,结果显示在新的工作表中,它不会直接进入sheet1。如果有人能在这方面给我建议的话,那就太理想了。
我正在使用2017。
发布于 2017-07-22 20:01:44
因为您可以获得DataTable对象,而且所有的列名都是相同的,我敢打赌您可以使用DataTable.Merge() -
Workbook workbook1 = ...;
Workbook workbook2 = ...;
DataTable bookTable1 = workbook1.ExportDataTable();
DataTable booktable2 = workbook2.ExportDataTable();
bookTable1.Merge(bookTable2);
// Spire specific API calls to save bookTable1 to Excel file对您的数据的唯一要求是您有一个键列。带着钥匙 -
bookTable1.PrimaryKey = bookTable1.Columns("DataID" /* your key column name here */); 发布于 2017-07-24 06:26:32
您可以使用CellRange.Copy(CellRange destRange)方法在Spire.XLS中将来自不同工作簿的工作表合并为一个,它不会抛出DuplicateNameException。
请参阅以下代码:
//Load the first workbook
Workbook workbook1 = new Workbook();
workbook1.LoadFromFile("Sample.xlsx");
Worksheet sheet1 = workbook1.Worksheets[0];
//Load the second workbook
Workbook workbook2 = new Workbook();
workbook2.LoadFromFile("sample2.xlsx");
Worksheet sheet2 = workbook2.Worksheets[0];
int a = sheet2.LastRow;
int b = sheet2.LastColumn;
//Copy data from the 2nd row in sheet2 into sheet1
sheet2.Range[2, 1, a, b].Copy(sheet1.Range[sheet1.LastRow + 1, 1, a + sheet1.LastRow, b]);
workbook1.SaveToFile("reslut.xlsx", ExcelVersion.Version2013); 我已经尝试过这个代码了,它在我这方面运行得很好。
https://stackoverflow.com/questions/45258465
复制相似问题