【问题标题】:C# and Excel Interop issue, Saving the excel file not smoothC# 和 Excel 互操作问题,保存 excel 文件不流畅
【发布时间】:2010-10-21 14:29:00
【问题描述】:

我可以打开并写入 excel 文件,但是当我尝试通过传递路径来保存文件时,保存操作会提示保存对话框。我期待它能够将文件完全保存在指定路径

代码如下:

excelApp.Save(exportToDirectory);
excelApp.Quit();

其中,exportToDirectory 是:“C:\files\strings.xlsx”。

PS:我已经检查过excel版本和类似问题。

谢谢

【问题讨论】:

    标签: c# interop excel-interop


    【解决方案1】:

    您需要使用Workbook.SaveAs 而不是Application.Save:

    Excel.Application app = new Excel.Application();
    Excel.Workbook wb = app.Workbooks.Add(missing);
    ...
    wb.SaveAs(@"C:\temp\test.xlsx", missing, missing, missing, missing,
              missing, Excel.XlSaveAsAccessMode.xlExclusive,
              missing, missing, missing, missing, missing);
    

    【讨论】:

    • 知道 Excel.XlSaveAsAccessMode.xlExclusive 的数值是多少吗?我需要在 Windows 脚本文件中将此传递给此函数。
    • @MrVimes 为您的派对迟到了,但是在这里他们供您将来参考:public enum XlSaveAsAccessMode { xlNoChange = 1, xlShared = 2, xlExclusive = 3 }
    【解决方案2】:

    设置以下属性也可能有帮助:

    excelApp.DisplayAlerts = false;
    excelApp.ScreenUpdating = false;
    excelApp.Visible = false;
    excelApp.UserControl = false;
    excelApp.Interactive = false;
    

    【讨论】:

    • 我尝试了很多解决方案,但这是唯一一个可以正常工作的解决方案!很有用!谢!!
    【解决方案3】:

    嗯,这就是微软的做法:

    // Save the Workbook and quit Excel.
    m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt, 
        m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
        m_objOpt, m_objOpt, m_objOpt, m_objOpt);
    m_objBook.Close(false, m_objOpt, m_objOpt);
    m_objExcel.Quit();
    

    查看他们的KB articles 之一。

    【讨论】:

      【解决方案4】:

      只需将 ActiveWorkbook.Saved property 设置为 true 即可在没有任何对话框的情况下 Quit();

      【讨论】:

        【解决方案5】:

        ExcelApp.Interactive = false 抑制任何对话框。

        excelApp.ActiveWorkbook.SaveAs(exportDirectory)

        【讨论】:

          【解决方案6】:

          我找到excelApp.ActiveWorkbook.save() 可以保存文件,然后我可以不用问就退出。

          【讨论】:

            【解决方案7】:

            myBook.Saved = true;
            myBook.SaveCopyAs(xlsFileName);
            myBook.Close(null, null, null);
            myExcel.Workbooks.Close();
            myExcel.Quit();

            【讨论】:

            • 这对我来说效果最好,而不是评分最高的答案。我喜欢这个解决方案的一点是它不会影响用户打开的其他 Excel 文件。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-04
            • 2014-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-12
            相关资源
            最近更新 更多