将excel文件合并为具有相同列名的1

时间:2017-07-22 19:38:28

标签: c#

我有以下错误......

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

感谢是否有人可以帮助我?

3 个答案:

答案 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); 

我已经尝试过代码,但它在我身边很有效。