我有以下错误......
System.Data.DuplicateNameException: 'A column named 'samplex' already
belongs to this DataTable.'
我有大量的多个excel文件需要合并为一个。但是所有列名都是一样的。所以我认为这就是我收到此错误的原因。
每个excel文件中的所有数据都在sheet1中。在网上搜索我找到的最好的是使用Spire.Xls,样本取自here
我的代码示例,使用控制台......
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");
感谢是否有人可以帮助我?
答案 0 :(得分:0)
由于您能够获得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
您的数据的唯一要求是您有一个关键列。 To configure the DataTable
with a key -
bookTable1.PrimaryKey = bookTable1.Columns("DataID" /* your key column name here */);
答案 1 :(得分:0)
当我使用Microsoft.Office.Interop.Excel时,取自here的样本,它解决了有关同名列的问题。代码冗长而复杂,但它可以工作,但您需要在计算机上安装Microsoft Office。只有一个小问题是结果显示在新表中,它不会直接进入sheet1。如果有人可以就此提出建议,那将是理想的。
我正在使用Visual Studio 2017.
答案 2 :(得分:0)
您可以在Spire.XLS中使用CellRange.Copy(CellRange destRange)方法将来自不同工作簿的工作表合并为一个,它不会抛出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);
我已经尝试过代码,但它在我身边很有效。