繁体   English   中英

使用 C# 互操作打开 Excel 文件时忽略失败的宏

[英]Ignore Failing Macro when Opening Excel File with C# Interop

我被要求编写一个脚本来爬取大量文件夹位置并列出所有 Excel 电子表格,这些电子表格与一组 SQL 和其他将升级到新服务器的数据源有连接。

为此,我需要打开每个文件,然后检查连接并返回与标准集匹配的连接。 所有这一切都发生得很好,直到我点击了最终用户在打开时运行宏的任何文件,该文件引用了一个不存在的文件 - 当 C# 脚本打开文件时,文件显示以下消息:

错误弹出窗口

如果我手动单击“结束”,脚本将转到下一个文件,一切正常,但我更愿意避免任何用户输入并记录宏存在问题的事实......我将如何 go 关于这样做?

我已经在将运行脚本的计算机上将 Excel 属性“禁用所有宏而不通知”设置为 true,使用与运行脚本相同的用户名,我认为这可以防止这种事情发生。 我还用DisplayAlerts=false打开 Excel ,所以这不是问题......

我根本不需要运行宏,也不想......!

对于上下文,打开每个文件的代码片段如下所示:

var app = new Application
{
    Visible = false,
    DisplayAlerts = false,
    ScreenUpdating = false
};
Workbook thisFile = null;
try
{
    //send a false password to stop Excel asking for one - when it is wrong, the error will be caught.
    thisFile = app.Workbooks.Open(file.FullName, ReadOnly: true, Password: "FakePassword");

    foreach (WorkbookConnection connection in thisFile.Connections)
    {

编辑:我突然想到,也许我可以做一些超时..? 如果有某种方法可以从脚本中关闭弹出框,那就可以了——我可以在 output 中记录计时器已过期,这就足够了。 所以......或者有没有办法在它弹出后关闭盒子?

通过在打开文件时按住 shift 打开工作簿时,我已经能够禁用启动宏。

我相信处理此问题的互操作方法是使用应用程序AutomationSecurity属性:

Excel.Application app = new Excel.Application();
app.Visible = true;
app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;

我在一个弹出消息框并将当前时间放在 A1 中的简单工作簿上对此进行了测试,它似乎工作正常。

Excel.Workbook wb = app.Workbooks.Open("c:/cdh/foot.xlsm");

默认情况下,弹出消息框并且 A1 有一个值,当我将其设置为禁用时,都没有发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM