关闭时禁用 Interop.Excel 的默认保存提示

Posted

技术标签:

【中文标题】关闭时禁用 Interop.Excel 的默认保存提示【英文标题】:Disable Interop.Excel's Default Save Prompt on Close 【发布时间】:2017-03-16 10:22:26 【问题描述】:

我正在使用将一堆计算数据保存到 excel 文件中

if (result == DialogResult.OK && saveFileDialog1.FileName != "")
        
            xl.DisplayAlerts = false;
            wb.SaveAs(fn, XlFileFormat.xlOpenXMLWorkbook, Missing.Value,
            Missing.Value, false, false, XlSaveAsAccessMode.xlNoChange,
            XlSaveConflictResolution.xlUserResolution, true,
            Missing.Value, Missing.Value, Missing.Value);

            wb.Close(true, misValue, misValue);
            xl.Quit();

            releaseObject(ws);
            releaseObject(wb);
            releaseObject(xl);
        
        else if (result == DialogResult.Cancel)
        
            wb.Close(true, misValue, misValue);
            xl.Quit();
            releaseObject(ws);
            releaseObject(wb);
            releaseObject(xl);
        

当我按下OK 时一切正常,但如果我CANCEL 保存,那么会出现另一个“通用”保存窗口?我在项目中没有其他SaveFileDialogs,我的假设是它来自 Excel 对象保存文件对话框,但我真的不知道我该如何摆脱它?

xlinterop 对象,ws 是工作表,wb 是工作簿

TA

【问题讨论】:

Excel interop: saving workbook without showing save dialog的可能重复 不是重复的!我想要保存对话框,而不是第二个保存对话框。该线程是关于 workbook.SaveAs (我已经在使用)。不过感谢您的研究! 【参考方案1】:

在调用 Close 方法之前将工作簿对象的“已保存”属性设置为 true。

像这样:

else if (result == DialogResult.Cancel)
        
            wb.Saved = true;
            wb.Close(true, misValue, misValue);
            xl.Quit();
            releaseObject(ws);
            releaseObject(wb);
            releaseObject(xl);
        

希望这会有所帮助。

【讨论】:

以上是关于关闭时禁用 Interop.Excel 的默认保存提示的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?

将数据从 c# 保存到 Excel 崩溃

加载类型库/DLL (Microsoft.Office.Interop.Excel.Application) 时出错

把dataGridView数据保存到已有的Excel表中

使用Microsoft.Office.Interop.Excel时,64位问题

使用对话框保存生成的 excel 文件