2011-08-10 2 views
11

Excel로 데이터 집합을 내보내는 콘솔 응용 프로그램을 만들어야합니다. 나는이 주제에 대한 인터넷 검색을 시도했지만 실제로 찾고있는 것을 찾지 못했습니다. 문제는 저장 창을 팝업해서는 안되며 자동으로 Excel 파일을 만들어야한다는 것입니다. 지금까지 다음 코드를 가지고 있지만 자동 저장 방법을 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.Excel interop : 저장 대화 상자를 표시하지 않고 통합 문서 저장

public static void CreateWorkbook(DataSet ds, String path) 
    { 
     int rowindex = 0; 
     int columnindex = 0; 

     Microsoft.Office.Interop.Excel.Application wapp = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel.Worksheet wsheet; 
     Microsoft.Office.Interop.Excel.Workbook wbook; 

     wapp.Visible = false; 

     wbook = wapp.Workbooks.Add(true); 
     wsheet = (Worksheet)wbook.ActiveSheet; 

     try 
     { 
      for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 
      { 
       wsheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName; 

      } 

      foreach (DataRow row in ds.Tables[0].Rows) 
      { 
       rowindex++; 
       columnindex = 0; 
       foreach (DataColumn col in ds.Tables[0].Columns) 
       { 
        columnindex++; 
        wsheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName]; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      String err = ex.Message; 
     } 
     wapp.UserControl = true; 
    } 

답변

24

모두 볼 수 있지만, 당신이 원하는 경우에 당신은 단지 그들 중 대부분 Type.Missing를 사용할 수 있습니다. 내가 파일 확장자를 포함하지 않았다

wbook.SaveAs("c:\\temp\\blah", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, 
      false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
wbook.Close(); 

참고, Excel이 당신을 위해 설정됩니다 : 같은

전형적인 호출이 보일 것이다.

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(v=VS.100).aspx은 각 인수를 설명합니다.

+0

감사합니다 Charles, 그 덕분에 : – ha1ogen

5

통합 문서의 SaveAs 메서드를 호출 해 봅니다. 매개 변수가 많은 경우 Type.Missing을 첫 번째 매개 변수 (파일 이름) 이외의 모든 매개 변수에 전달하십시오.

+0

나중에 나는 그것을 시도했지만 너무 많은 취, TextVisualLayout 개체, TextCodepage 객체, AddToMru 객체, ConflictResolution 객체, CreateBackup, XlSaveAsAccessMode AccessMode 객체, ReadOnlyRecommended 객체, WriteResPassword 객체 매개 변수가 무효 다른 이름으로 저장을 (파일 이름, 오브젝트 화일 형식, 개체 암호 객체 , 객체 로컬); 나는 그것을 사용하는 방법을 모른다 ... – ha1ogen

+0

그냥 처음 두가 필수이고, 다른 모든 것은 누락 된 매개 변수로 사용될 수 있다고 생각합니다. –

+0

그래서 "객체 파일 이름"은 무엇입니까? 당신은 나에게 예제를 줄 수 – ha1ogen

3

는 선택 사항입니다 WorkBook.SaveAs()에 인수 MSDN Documentation

wbook.SaveAs(...); 
+0

wbook.SaveAs();이어야합니다. ... – Jacco

2

자동화 대신 문서를 생성하려면 open xml sdk을 사용하십시오. 그것은 훨씬 더 신뢰할 수 있습니다.

+0

당신은 응답과 해결책에 대한 자세한 내용을 알려주시겠습니까? –

2
wapp.DisplayAlerts = false; 

falseApplication.DisplayAlerts 속성을 설정하는 것은 그 통합 문서의 모든 모든 경고를 표시 중지됩니다.

2

DisplayAlerts 속성을 사용하십시오. 매우 간단하고 빠릅니다.

private void SaveAs(Excel.Workbook WorkBook, string FileName) 
    { 
     m_Saving = true; 
     try 
     { 
      if (Global.CreatingCopy) 
       this.ExcelApp.DisplayAlerts = false; 

      WorkBook.SaveAs(FileName); 
     } 
     finally 
     { 
      m_Saving = false; 
      if (this.ExcelApp.DisplayAlerts == false) 
       this.ExcelApp.DisplayAlerts = true; 
     } 
    } 

파일을 저장할 때 Excel에서 파일 종류를 정의하지 마십시오. 형식이 변경 될 가능성이 있기 때문입니다.

원본 문서가 .xls이고 현재 사용자가 Office 2013 기본 형식 인 .xlsx 인 경우 Excel에서 파일을 .xlsx로 변환하고 사용자가 Excel 2010 또는 상위 캔트에서 파일을 열지 않습니다. .

4
m_xlApp.DisplayAlerts = false; 

// Quit Excel and clean up. 
m_xlWorkbook.SaveAs(Filename: m_xlFilePath, FileFormat: excelFileExtension, 
Password: false, ReadOnlyRecommended: XlSaveAsAccessMode.xlNoChange, 
ConflictResolution: XlSaveConflictResolution.xlLocalSessionChanges); 

m_xlWorkbook.Close(); 

는 XlSaveConflictResolution.xlLocalSessionChanges

에 분쟁 해결을 추가하고 그래서 윈도우가 표시되지 않습니다 false로 응용 프로그램의 DisplayAlerts 속성을 설정합니다.

자세한 내용은 https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlsaveconflictresolution.aspx을 참조하십시오.

관련 문제