Excel integerp: salvare la cartella di lavoro senza visualizzare la window di salvataggio

Devo creare un'applicazione console che esport un set di dati in Excel. Ho provato googling e guardando i post su questo argomento, ma non ho trovato quello che sto cercando. Il problema è che non dovrebbe aprire la window di salvataggio, dovrebbe creare automaticamente il file excel. Finora ho il seguente codice, ma non so come farlo salvare automaticamente. Apprezzerò qualsiasi aiuto.

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

Tutti gli argomenti di WorkBook.SaveAs() sono facoltativi, ma è ansible utilizzare solo Type.Missing per la maggior parte di loro se lo si desidera.

La chiamata tipica assomigliava a:

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

Notare che non ho incluso l'estensione di file, Excel lo imposta per te.

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(v=VS.100).aspx descrive ognuno degli argomenti.

Provare a call il metodo SaveAs della cartella di lavoro. Per il lotto del parametro, provare a passare Type.Missing a tutti i parametri, ma il primo (il nome del file).

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

Aggiungi risoluzione di conflitto a XlSaveConflictResolution.xlLocalSessionChanges

e impostare la properties; DisplayAlerts dell'applicazione su false per cui la window non verrà visualizzata.

vedere https://msdn.microsoft.com/en-us/library/microsoft.office.integerp.excel.xlsaveconflictresolution.aspx per ulteriori informazioni.

Consultare la documentazione MSDN

 wbook.SaveAs(...); 

Utilizza open xml sdk per generare documenti anziché l'automazione; è molto più affidabile.

 wapp.DisplayAlerts = false; 

impostando la properties; Application.DisplayAlerts a false smetterà di visualizzare tutti gli avvisi per tutte le sue cartelle di lavoro.

Utilizza la properties; DisplayAlerts. È molto semplice e veloce.

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

Non lasciare mai che Excel definisca il tipo di file quando si intende salvare il file. Perché è ansible che il formato venga modificato.

Se il documento originale era .xls e l'utente corrente ha l'ufficio 2013 il formato predefinito .xlsx e quindi l'Excel convertire il file in .xlsx e gli utenti non hanno l'Excel 2010 o superiore non possono aprire il file.