首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将excel文件合并为具有相同列名的1

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

Stack Overflow用户
提问于 2017-07-22 19:38:27
回答 3查看 759关注 0票数 0

我有以下错误..。

代码语言:javascript
复制
System.Data.DuplicateNameException: 'A column named 'samplex' already     
belongs to this DataTable.'

我有大量的多个excel文件,需要合并成一个。但是所有的列名都是一样的。所以我想这就是为什么我会犯这个错误。

所有的数据都在sheet1中,每个excel文件都有一个。在网上搜索我找到的最好的一个是使用Spire.Xls,从这里获取的样本。

我的代码样本,使用控制台..。

代码语言:javascript
复制
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");

如果有人能帮我做这件事很感激?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-23 08:35:28

当我使用Microsoft.Office.Interop.Excel (从这里获取的示例)时,它解决了有关同名列的问题。代码是长而复杂的,但它可以工作,但您需要在机器上使用Microsoft。只有一个小问题是,结果显示在新的工作表中,它不会直接进入sheet1。如果有人能在这方面给我建议的话,那就太理想了。

我正在使用2017。

票数 0
EN

Stack Overflow用户

发布于 2017-07-22 20:01:44

因为您可以获得DataTable对象,而且所有的列名都是相同的,我敢打赌您可以使用DataTable.Merge() -

代码语言:javascript
复制
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

对您的数据的唯一要求是您有一个键列。带着钥匙 -

代码语言:javascript
复制
bookTable1.PrimaryKey = bookTable1.Columns("DataID" /* your key column name here */); 
票数 0
EN

Stack Overflow用户

发布于 2017-07-24 06:26:32

您可以使用CellRange.Copy(CellRange destRange)方法在Spire.XLS中将来自不同工作簿的工作表合并为一个,它不会抛出DuplicateNameException。

请参阅以下代码:

代码语言:javascript
复制
//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); 

我已经尝试过这个代码了,它在我这方面运行得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45258465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档