autohotkey透過com物件控制excel的許可權問題

hzncpa發表於2024-09-29

用途

主要是一些需要自動化錄入資料或者批次修改表格屬性的場景吧,我個人的需求更多是根據一些外部源來輸入資料到表格,當然讀取表格的資料做進一步處理也是有的

為什麼不用自帶的vba甚至py

vba在快捷鍵管理這方面和ahk比不了,py也一樣的,快捷鍵管理上ahk當然是更加方便的選擇,這類需求本身都不會很複雜,弄個方便的快捷鍵當然是更加重要的

本文討論的問題

主要就是這個過程中的許可權問題,基礎的使用上想必不用多說,具體使用的問題也和本文無關

正文

最簡單的一個測試指令碼com物件讀取表格資料的例子

if !(A_IsAdmin || InStr(DllCall("GetCommandLine", "str"), ".exe"" /r"))
		RunWait % "*RunAs " (s:=A_IsCompiled ? "" : A_AhkPath " /r ") """" A_ScriptFullPath """" (s ? "" : " /r")


xl:=ComObjActive("excel.Application")
te:=xl.cells(1,1).value
msgbox,% te

這個例子無論在wps或是excel中使用,都會有異常報錯的問題
比如
Error: 0x800401E3 - 操作無法使用

原因

上面那段提權程式碼的問題,這樣使用以後指令碼是管理員許可權執行,而正常情況下開啟的表格是非管理員,問題就出現了

解決方案

  1. 沒有特殊需求的情況下可以不用提權程式碼的,一般來說我個人注意到需要使用的是win按鍵對映之類的情況,當然這個按需求使用而不是一股腦全使用更加靠譜
  2. 管理員許可權的開啟表格,這個不太推薦,需要人工來操作有點背離了自動化的初衷了,當然也可以指令碼來管理員啟動就是了

相關文章