2011-08-10 26 views
11

Tengo que crear una aplicación de consola que exporte un conjunto de datos a Excel. He intentado buscar en Google y en publicaciones sobre este tema, pero realmente no he encontrado lo que estoy buscando. El problema es que no debería aparecer la ventana de guardar, debería crear automáticamente el archivo de Excel. Hasta ahora tengo el siguiente código, pero no sé cómo hacer que se guarde automáticamente. Agradecería cualquier ayuda.Interoperabilidad de Excel: guardar el libro de trabajo sin mostrar el diálogo de guardar

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; 
    } 

Respuesta

24

Todos los argumentos a WorkBook.SaveAs() son opcionales, pero sólo se puede utilizar Type.Missing para la mayoría de ellos, si así lo desea.

La llamada típica se vería así:

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(); 

Tenga en cuenta que no he incluido la extensión del archivo, Excel establecer que para usted.

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(v=VS.100).aspx describe cada uno de los argumentos.

+0

gracias Charles, que funcionó :) – ha1ogen

5

intenta llamar al método del libro de trabajo SaveAs. Para el lote del parámetro, intente pasar Type.Missing a todos los parámetros excepto el primero (el nombre del archivo).

+0

ya lo he intentado pero se necesita tantos: parámetros GuardarComo void (Object Nombre de archivo, FileFormat objeto, objeto contraseña, objeto WriteResPassword, objeto ReadOnlyRecommended, objeto createBackup, XlSaveAsAccessMode AccessMode, objeto solución de conflictos, objeto AddToMru, objeto TextCodepage, objeto TextVisualLayout , objeto Local); que no sé cómo usarlo ... – ha1ogen

+0

Creo que solo los dos primeros son obligatorios, todos los demás pueden usarse como parámetros faltantes. –

+0

entonces, ¿qué sería un "objeto Nombre de archivo"? ¿Me puede dar un ejemplo – ha1ogen

2

Utilice open xml sdk para generar documentos en lugar de automatización; es mucho más confiable.

+0

podría por favor más detalles a la respuesta y la solución –

2

Utilice la propiedad DisplayAlerts. Es muy simple y rápido.

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; 
     } 
    } 

Nunca permita que Excel defina el tipo de archivo cuando vaya a guardar el archivo. Porque es posible que el formato se modifique.

Si doc original de .xls y el usuario actual tiene la oficina 2013 formato por defecto de su .xlsx y luego el Excel convierte el archivo a .xlsx y los usuarios del tha imposible tener el Excel 2010 o superior, no puede abrir el archivo .

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(); 

Añadir Resolución de conflictos a XlSaveConflictResolution.xlLocalSessionChanges

y establezca la propiedad DisplayAlerts de la aplicación a falso lo que la ventana no se mostrará.

ver https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlsaveconflictresolution.aspx para obtener más información.

Cuestiones relacionadas