Excel互操作:保存工作簿而不显示保存对话框

我必须创build一个将数据集导出到Excel的控制台应用程序。 我试过Googlesearch,看着这个主题的post,但还没有真正find我在找什么。 问题是不应该popup保存窗口,它应该自动创buildexcel文件。 到目前为止,我有下面的代码,但我不知道如何使它自动保存。 将不胜感激任何帮助。

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

WorkBook.SaveAs()所有参数都是可选的,但是如果你愿意的话,你可以在Type.Missing大部分使用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描述每个参数。

尝试调用工作簿的SaveAs方法。 对于大量的参数,尝试将Type.Missing传递给除第一个(文件名)之外的所有参数。

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

将冲突解决scheme添加到XlSaveConflictResolution.xlLocalSessionChanges

并将应用程序的DisplayAlerts属性设置为false,以使该窗口不显示。

有关更多信息,请参阅https://msdn.microsoft.com/zh-cn/library/microsoft.office.interop.excel.xlsaveconflictresolution.aspx

请参阅MSDN文档

 wbook.SaveAs(...); 

使用open xml sdk生成文档而不是自动化; 它更可靠。

 wapp.DisplayAlerts = false; 

Application.DisplayAlerts属性设置为false将停止显示所有工作簿的所有警报。

使用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或更高版本无法打开该文件。