2012-11-30 2 views
3

그래서 아래에있는 코드를 많이 연구하고 사용하여 전달중인 항목 (DataTable)이 Excel에서 열립니다. 같은 책에서 열어야하는 약 5 장이 있습니다. 아래 코드는 처음 2 번째 코드입니다. 문제는 새로운 WorkBooks에서 모두 열리는 문제입니다. - 모두 동일한 WorkBook에서 열어야합니다. 그들은 각각의 새로운 통합 문서에서 올바른 시트를 열었습니다. 그러나 간단한 "if"문이 작동한다고 생각했지만, 그렇지 않습니다. 하나의 WorkBook으로 통합하는 방법에 대한 의견은 크게 감사 드리며 미리 감사드립니다.Excel.WorkSheets를 동일한 Excel.Workbook으로 가져 오기

Microsoft.Office.Interop.Excel.Application oExcel = new    
Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbooks oBooks; 
Microsoft.Office.Interop.Excel.Sheets oSheets; 
Microsoft.Office.Interop.Excel.Workbook oBook; 
Microsoft.Office.Interop.Excel.Worksheet oSheet; 


oExcel.Visible = true; 
oExcel.DisplayAlerts = false; 
oExcel.Application.SheetsInNewWorkbook = 5; 
oBooks = oExcel.Workbooks; 

oBook = (Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing)); 
oSheets = oBook.Worksheets; 

     if (sheetName == "Combined") 
     { 

      oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(1); 
      oSheet.Name = sheetName; 

      object[,] arr = new object[dt.Rows.Count, dt.Columns.Count]; 


      for (int r = 0; r < dt.Rows.Count; r++) 
      { 
       DataRow dr = dt.Rows[r]; 
       for (int c = 0; c < dt.Columns.Count; c++) 
       { 
        arr[r, c] = dr[c]; 
       } 
      } 


      Microsoft.Office.Interop.Excel.Range c1 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1, 1]; 
      Microsoft.Office.Interop.Excel.Range c2 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1 + dt.Rows.Count - 1, dt.Columns.Count]; 
      Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2); 


      range.Value2 = arr; 
     } 
     else if (sheetName == "Auto") 
      { 

      oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(2); 
      oSheet.Name = sheetName; 
      object[,] arr = new object[dt.Rows.Count, dt.Columns.Count]; 


      for (int r = 0; r < dt.Rows.Count; r++) 
      { 
       DataRow dr = dt.Rows[r]; 
       for (int c = 0; c < dt.Columns.Count; c++) 
       { 
        arr[r, c] = dr[c]; 
       } 
      } 


      Microsoft.Office.Interop.Excel.Range c1 =  
      (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1, 1]; 
      Microsoft.Office.Interop.Excel.Range c2 = 
      (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1 + dt.Rows.Count - 1, 
      dt.Columns.Count]; 
      Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2); 


      range.Value2 = arr; 
      } 

답변

0

당신의 코드는 코멘트를하지 않고 이해하는 데 시간이 너무 오래 조금이지만, 현재 통합 문서 내부에 새 시트를 추가 싶은 경우 myWorkbook.Sheets.Add() 메소드 (myWorkbook는 심판이있다 현재 통합 문서로).

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.sheets.add(v=office.14).aspx

+0

오른쪽. 내가 뭘 하려는지 DataTables 내 반환 반환 SQL에서 저장 프로 시저에서 당겨 및 하나의 WorkBook에 통합 해요. "myWorkBook.Sheets.Add()"는 각 "if"문에서 실행되는 경우 빈 시트를 추가합니다. 어느 것이 매우 유용합니다. 나는 다시 돌아가서 동시에 그들을 모두 달리고 그것이 어떤 차이를 만들지 알아봐야 할 것 같다. – scottO

+0

Add() 메서드는 통합 문서에 새 시트를 만들고 활성 시트로 설정합니다. 새 시트가 만들어지면 데이터를 추가 할 수 있습니다 (시트에서 범위를 가져 와서 시트 안의 값을 설정 함) – Ksempac

관련 문제