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

C# 如何在不显示Excel互操作保存对话框的情况下保存工作簿?,c#,.net,excel,save,office-interop,C#,.net,Excel,Save,Office Interop,我必须创建一个控制台应用程序,将数据集导出到Excel。问题是它不应该弹出保存窗口,它应该自动创建Excel文件。到目前为止,我有以下代码,但我不知道如何使它自动保存。非常感谢您的帮助 public static void CreateWorkbook(DataSet ds, String path) { int rowindex = 0; int columnindex = 0; Microsoft.Office.Interop.Excel.Application w

我必须创建一个控制台应用程序,将
数据集
导出到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;
}
publicstaticvoidcreateworkbook(数据集ds,字符串路径)
{
int rowindex=0;
int columnindex=0;
Microsoft.Office.Interop.Excel.Application wapp=新的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=(工作表)wbook.ActiveSheet;
尝试
{
对于(int i=0;i
尝试调用工作簿的
SaveAs
方法。对于大量参数,请尝试将
Type.Missing
传递给除第一个(文件名)以外的所有参数。

请参阅


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将为您设置该选项


描述每个参数。

使用
openxmlsdk
生成文档,而不是自动生成;它更可靠

wapp.DisplayAlerts = false;

将属性设置为
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或更高版本的用户无法打开该文件。

冲突解决方案添加到
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();

有关更多信息,请参阅。

ya我尝试过,但它需要很多参数:void SaveAs(对象文件名、对象文件格式、对象密码、对象WriteResPassword、对象ReadOnlyRecommended、对象CreateBackup、xlsaveAsAccess模式访问模式、对象冲突解决、对象AddToMru、对象TextCodepage、对象TextVisualLayout、对象本地); 我不知道如何使用它…我认为只有前两个是必需的,所有其他的都可以用作缺少的参数。那么“对象文件名”是什么呢?你能给我一个电话吗example@ha1:只需使用字符串
Object
是所有其他.NET类型的基本类型,因此您可以传递任何类型来代替
Object
type参数。请提供响应和解决方案的详细信息
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();