如何在不显示Excel互操作的保存对话框的情况下保存工作簿?
我必须创建一个控制台应用程序,将DataSet
导出到Excel。 问题是它不应该弹出保存窗口,它应该自动创建Excel文件。 到目前为止,我有以下代码,但我不知道如何使其自动保存。 非常感谢任何帮助。
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
。
典型的通话看起来像:
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会为您设置。
Workbook.SaveAs方法(Microsoft.Office.Tools.Excel)| Microsoft Docs描述了每个参数。
尝试调用工作簿的SaveAs
方法。 对于大量参数,尝试将Type.Missing
传递给所有参数,但第一个(文件名)。
将ConflictResolution
添加到XlSaveConflictResolution.xlLocalSessionChanges
并将应用程序的DisplayAlerts
属性设置为false
以便不显示该窗口。
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 Enum(Microsoft.Office.Interop.Excel)| Microsoft Docs获取更多信息。
请参阅MSDN文档
wbook.SaveAs(...);
wapp.DisplayAlerts = false;
将Application.DisplayAlerts
属性设置为false
将停止显示其所有工作簿的所有警报。
使用open xml sdk
生成文档而不是自动化; 它更可靠。
使用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定义文件类型。 因为格式可能会被更改。
如果原始doc是.xls并且当前用户将office 2013设置为默认格式,则为.xlsx,然后Excel将文件转换为.xlsx,并且用户不会使Excel 2010或上级无法打开文件。