2010-03-12 3 views
4

400 개의 엑셀 파일이있는 폴더가 있습니다. 이 모든 Excel 파일의 워크 시트를 하나의 Excel 파일로 복사해야합니다.C#을 사용한 Excel 자동화

Interop 및 Reflection 네임 스페이스를 사용하면 heres가 지금까지 수행 한 작업입니다.

folderBrowserDialog를 사용하여 폴더를 탐색하고 선택하면 폴더 내의 파일 이름을 가져 와서이 파일을 반복 할 수 있습니다.이 파일은 내가받은만큼 도움이 될 것입니다.

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!"); 
} 

복사 한 시트를 대상 파일에 추가하려면 어떻게합니까? 질문이 명확하길 바래요?

감사합니다.

답변

1

Worksheet.Copy (Before, After)를 사용하고 원하는 주 파일의 마지막 워크 시트로 after를 지정하십시오. mainApp에 새 워크 시트를 만들어 예외를 발생시키지 않도록 입력 할 워크 시트가 있어야 할 수도 있습니다.

는 다음을 시도해보십시오

  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"); 
+0

덕분에, 그것을 밖으로 시도 할 것이다 – tecno

1

어떻게 같은 약 : 직접 작업 샘플 밖으로 나를 위해 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 
    } 
} 
+0

덕분에 그것을 밖으로 시도 할 것이다 – tecno

관련 문제