使用PowerShell打开Excel文件时缺lessmacros
我试图写的PowerShell脚本的目的是 – 打开一个Excel文档并运行一个macros。 (该macros存储在个人工作簿文件personal.xlsb
,并成功运行)
问题 – 当通过PowerShell代码打开excel文件时,它打开正常,但是通过调用Run("NameOfMacro")
macros时,出现错误,指出未findmacros。 我试图find打开的Excel文件中的macros,它不会出现在macros列表中。 这似乎是因为personal.xlsb
文件不加载。
所以我closures了excel文件,手动打开它,但macros仍然丢失。 然后,我手动打开personal.xlsb
文件,并注意到该macros存在,但是macros仍然不会出现在Excel文件或任何其他Excel我打开文件。
试图了解为什么personal.xlsb
文件突然停止加载后,一个令人沮丧的小时。 我注意到另一件事情 – 如果我杀了由PowerShell代码(通过任务pipe理器窗口)启动的excel.exe
进程,然后打开任何Excel文档,macros可用!
所以我已经缩小了这个问题 – macros不可用,因为Personal.xlsb
不打开/加载当我通过PowerShell打开Excel文件。
有没有人有一个想法为什么会发生这种情况,我需要做什么来解决这个问题?
代码参考
$excel = New-Object -comobject Excel.Application $FilePath = "D:\DailyReport.xls" $workbook = $excel.Workbooks.Open($FilePath) $excel.Visible = $true $worksheet = $workbook.worksheets.item(1) $excel.Run("SelectDataFromReport")
错误我得到 –
使用“31”参数调用“运行”的exception:“无法运行macros”SelectDataFromReport“macros可能在此工作簿中不可用,或者所有macros都可能被禁用。
在行:18 char:11 + $ excel.Run <<<<(“SelectDataFromReport”)+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException
顺便说一句,我默认使用64位PowerShell控制台,但我也尝试使用32位控制台运行代码,但没有什么区别。 在Excel中,我已经添加了位置作为一个值得信赖的位置,我已经允许在编辑模式下默认打开excel文件。
你可以像这样在personal.xlsb中调用macros:
$excel = New-Object -comobject Excel.Application $wbPersonalXLSB = $excel.workbooks.open("$env:USERPROFILE\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLSB") $FilePath = "D:\DailyReport.xls" $workbook = $excel.Workbooks.Open($FilePath) $excel.Visible = $true $worksheet = $workbook.worksheets.item(1) $excel.Run("PERSONAL.XLSB!SelectDataFromReport") $wbPersonalXLSB.Close() $workbook.save() $workbook.close() $excel.quit()
$x1 = New-Object -comobject Excel.Application $wb = $x1.workbooks.open("$env:C:\teste\testamacro.xlsm") $FilePath = "c:\teste\testamacro" $workbook = $x1.Workbooks.Open($FilePath) $x1.Visible = $true $worksheet = $workbook.worksheets.item(1) $x1.Run("testamacro.xlsm!SelectDataFromReport") $wb.Close() $workbook.save()` $workbook.close() $x1.quit()