所以我试图制作一个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文件,这些文件都相互关联,每个文件只用了一张纸。我正在关注...
在您的内部循环中,您向“最终”工作簿(“工作表”)添加了一个新工作表,并在每个源工作表之前复制了一个工作表。因此,由Add
命令创建的每个“工作表”都将为空,因为实际上您为每个源工作表创建了两个工作表。另一个问题是,正如您提到的,excel中的数组是基于1的;因此您必须循环播放,直到j <= count
而不是j < count
。
尝试下面的链接
将工作表合并为一个最简单的方法是通过名为Spire.Xls的第三方组件。这是一个独立的.NET组件。
通常有两种方法可以使用C#自动执行Excel任务。