[英]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.