我必须创建一个将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;
}
答案 0 :(得分:29)
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 Method (Microsoft.Office.Tools.Excel) | Microsoft Docs描述了每个参数。
答案 1 :(得分:5)
尝试调用工作簿的SaveAs
方法。对于大量参数,尝试将Type.Missing
传递给所有参数,但第一个(文件名)。
答案 2 :(得分:4)
将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了解详情。
答案 3 :(得分:3)
wbook.SaveAs(...);
答案 4 :(得分:3)
wapp.DisplayAlerts = false;
将Application.DisplayAlerts
属性设置为false
将停止显示其所有工作簿的所有提醒。
答案 5 :(得分:2)
使用open xml sdk
生成文档而不是自动化;它更可靠。
答案 6 :(得分: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或上级无法打开文件。