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

问题描述 投票:0回答:4

所以我试图制作一个Excel表格聚合器。在我的工作中,我们得到了一些人,这些人向我们发送了一堆单独的excel文件,这些文件都相互关联,每个文件只用了一张纸。

我在某种程度上一直关注this previous post's ideas。但是这样做之后,我复制的某些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文件,这些文件都相互关联,每个文件只用了一张纸。我正在关注...

c# excel office-interop excel-interop
4个回答
1
投票

在您的内部循环中,您向“最终”工作簿(“工作表”)添加了一个新工作表,并在每个源工作表之前复制了一个工作表。因此,由Add命令创建的每个“工作表”都将为空,因为实际上您为每个源工作表创建了两个工作表。另一个问题是,正如您提到的,excel中的数组是基于1的;因此您必须循环播放,直到j <= count而不是j < count


1
投票

尝试下面的链接


0
投票

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


0
投票

通常有两种方法可以使用C#自动执行Excel任务。

© www.soinside.com 2019 - 2024. All rights reserved.