簡體   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