如何将多个Excel文件合并为一个Excel文件

3
我正在尝试制作一个Excel表格聚合器。在我的工作中,我们会收到一些人发送给我们的单独的Excel文件,这些文件都是相关的,每个文件只使用了1个工作表。
我在某种程度上遵循了此前帖子的思路。但在这样做时,我复制的一些Excel表格出现了空白。只有一些表格出现了这种情况。我不知道为什么有些表格是空白的,而其他表格则正常。
以下是我用来打开和复制Excel文件的代码。
         OpenFileDialog browse = new OpenFileDialog();
            browse.Multiselect = true;
            DialogResult result = browse.ShowDialog();

            if (result == DialogResult.OK)

                try //try to open it. If its a proper excel file
                {   
                    excel = new Excel.Application();
                    excel.Workbooks.Add("");
                    finalized = excel.Workbooks[1];
                    excel.SheetsInNewWorkbook = 1;
                    for(int i=0; i< browse.FileNames.Length; i++)
                    {
                        excel.Workbooks.Add(browse.FileNames[i]);
                    }
                    //skip the first workbook as it is the finalized one
                    //also note everything in excel starts at 1 and not 0
                    for(int i=2; i<excel.Workbooks.Count; i++)
                    {
                        int count = excel.Workbooks[i].Worksheets.Count;
                        excel.Workbooks[i].Activate();
                        for (int j = 1; j < count; j++)
                        {

                            Excel._Worksheet pastee = (Excel._Worksheet)excel.Workbooks[i].Worksheets[j];
                            Excel._Worksheet sheet = (Excel._Worksheet)finalized.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                            //Excel._Worksheet sheet = finalized.Sheets[1];
                            pastee.Copy(Before: sheet);


                        }//end of for j
                    }//end of for i
                }//end of try

这是我用来保存Excel文件的代码

            SaveFileDialog browse = new SaveFileDialog();
            browse.Title = "Save as Excel";
            browse.Filter = "Excel workbook | *.xlsx";
            DialogResult result = browse.ShowDialog();

            finalized.SaveAs(browse.FileName, Excel.XlFileFormat.xlWorkbookDefault);

            MessageBox.Show("Success", "Message");
            //unlock the file
            Global.releaseComObjects(finalized, excel);

你实际上想做什么?你想复制那些不为空的Excel文件,还是在你复制时获取Excel文件?@Alexander Ryan Baggett - Sarath Subramanian
正如我在描述中所解释的那样,我想打开多个Excel文件,并将这些文件中的每个工作表复制到一个新的单一Excel文件中。 - Alexander Ryan Baggett
我打开的文件中的Excel表格不是空白的。 - Alexander Ryan Baggett
实际上找到了一个非常好用的免费插件:http://www.rondebruin.nl/win/addins/rdbmerge.htm - Robbert Koppenol
这个回答解决了你的问题吗?如何将两个带有工作表名称的Excel文件合并为一个? - Jim G.
2个回答

2
在你的内部循环中,你会为你的“finalized”工作簿(“sheet”)添加一个新的工作表,并且在每个源工作表之前复制一个工作表。因此,你的Add命令创建的每个“sheet”实际上都是空的,因为你为每个源工作表创建了两个工作表。另一个问题是,正如你所提到的,Excel中的数组是基于1的;因此,你必须循环直到j <= count而不是j < count
所以我认为以下代码会更好:
Excel.Worksheet dummy = finalized.Worksheets[1];

for (int i = 2; i <= excel.Workbooks.Count; i++)
{
    int count = excel.Workbooks[i].Worksheets.Count;

    for (int j = 1; j <= count; j++)
    {
        Excel._Worksheet pastee = (Excel._Worksheet)excel.Workbooks[i].Worksheets[j];
        pastee.Copy(dummy);
    }
}

dummy.Delete();

我尝试了一下,似乎只复制了文本 - 没有任何样式/字体/颜色等。可能是Excel.Interop版本的问题,我不确定。 - itsho

0

将工作表合并为一个的最简单方法是通过名为Spire.Xls的第三方组件。它是一个独立的.NET组件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spire.Xls;
using System.Data;


namespace Spire.XLS
{
    class Program
    {
        static void Main(string[] args)
    {

        Workbook workbook = new Workbook();
        //load the first workbook
        workbook.LoadFromFile(@"merge1.xlsx");
        //load the second workbook
        Workbook workbook2 = new Workbook();
        workbook2.LoadFromFile(@"merge2.xlsx");

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


        //save the workbook
        workbook.SaveToFile("result.xlsx");
    }
    }
}

没有购买Spire.Xls,限制是3页。 - William Humphries

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接