autohotkey通过com对象控制excel的权限问题

用途

主要是一些需要自动化录入数据或者批量修改表格属性的场景吧,我个人的需求更多是根据一些外部源来输入数据到表格,当然读取表格的数据做进一步处理也是有的

为什么不用自带的vba甚至py

vba在快捷键管理这方面和ahk比不了,py也一样的,快捷键管理上ahk当然是更加方便的选择,这类需求本身都不会很复杂,弄个方便的快捷键当然是更加重要的

关于表格的版本选用

office自然是都可以用的,wps的话网上某些精简的wps2016不行,测试有问题,正常的专业版2019都没有问题的

本文讨论的问题

主要就是这个过程中的权限问题,基础的使用上想必不用多说,具体使用的问题也和本文无关

正文

最简单的一个测试脚本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. 管理员权限的打开表格,这个不太推荐,需要人工来操作有点背离了自动化的初衷了,当然也可以脚本来管理员启动就是了
posted @ 2024-09-29 16:49  反伪效率  阅读(257)  评论(0)    收藏  举报