如何在不显示Excel互操作的保存对话框的情况下保存工作簿?

时间:2011-08-10 14:44:46

标签: c# .net excel save office-interop

我必须创建一个将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;
}

7 个答案:

答案 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)

请参阅MSDN Documentation

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或上级无法打开文件。