Excel自动化使用C#

我有一个接近400的Excel文件的文件夹。 我需要将所有这些excel文件中的工作表复制到一个excel文件中。

使用Interop和Reflection命名空间是迄今为止我所完成的。

我使用folderBrowserDialog浏览到该文件夹​​并select它,这使我能够获得该文件夹中的文件的文件名,并遍历它们,这是尽我所能,任何帮助,将不胜感激。

if (result == DialogResult.OK) { string path = fbd1.SelectedPath; //get the path int pathLength = path.Length + 1; string[] files = Directory.GetFiles(fbd1.SelectedPath);// getting the names of files in that folder foreach (string i in files) { MessageBox.Show("1 " + i); myExcel.Application excelApp = new myExcel.ApplicationClass(); excelApp.Visible = false; MessageBox.Show("2 " + i); myExcel.Workbook excelWorkbook = excelApp.Workbooks.Add(excelApp.Workbooks._Open(i, 0, false, 5, "", "", false, myExcel.XlPlatform.xlWindows, "", true, false, 0, true)); myExcel.Sheets excelSheets = excelWorkbook.Worksheets; MessageBox.Show("3 " + i); excelApp.Workbooks.Close(); excelApp.Quit(); } MessageBox.Show("Done!"); } 

如何将复制的图纸追加到目标文件。 希望问题是清楚的?

谢谢。

使用Worksheet.Copy(之前,之后)并指定之后作为最后一个工作表的任何主文件你想要的。 请注意,您可能需要在mainApp中创build一个新的工作表,以便它有一个工作表后input,以便它不会引发exception。

尝试以下操作:

  Excel.Application mainApp = new Excel.ApplicationClass(); mainApp.Visible = false; Excel.Workbook mainWorkbook = excelApp.Workbooks.Add(null); Excel.Sheets mainWorkSheets = mainWorkbook.Worksheets; foreach (string i in files) { MessageBox.Show("1 " + i); Excel.Application exApp = new Excel.ApplicationClass(); exApp.Visible = false; MessageBox.Show("2 " + i); Excel.Workbook exWorkbook = exApp.Workbooks.Open(i, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); MessageBox.Show("3 " + i); foreach(Excel.Worksheet sheet in exWorkbook.Worksheets) { sheet.Copy(Type.Missing, mainWorkSheets[mainWorkSheets.Count -1]); } } mainApp.Save("NewExcel"); 

怎么样: Merge(@"C:\ExcelFolder", @"C:\FinalDestination.xls"); 为我工作,直接离开工作样品 – 为您修剪。

希望你不需要任何调整,但如果你这样做,然后做(0:

请看下面的代码:

 private void Merge(string strSourceFolder, string strDestinationFile) { try { //1. Validate folder, //2. Instantiate excel object //3. Loop through the files //4. Add sheets //5. Save and enjoy! object missing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); ExcelApp.Visible = false; //Create destination object Microsoft.Office.Interop.Excel.Workbook objBookDest = ExcelApp.Workbooks.Add(missing); foreach (string filename in Directory.GetFiles(strSourceFolder)) { if (File.Exists(filename)) { //create an object Microsoft.Office.Interop.Excel.Workbook objBookSource = ExcelApp.Workbooks._Open (filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //Browse through all files. foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in objBookSource.Worksheets) { sheet.Copy(Type.Missing, objBookDest.Worksheets[objBookSource.Worksheets.Count]); } objBookSource.Close(Type.Missing, Type.Missing, Type.Missing); objBookSource = null; } } objBookDest.SaveAs(strDestinationFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); objBookDest.Close(Type.Missing, Type.Missing, Type.Missing); objBookDest = null; ExcelApp = null; } catch (System.Exception e) { //Catch } }