手动打开Excel文件可运行公式,而使用VBScript或PowerShell或Python的win32com打开Excel文件不会


问题内容

我遇到了脚本无法更新excel文件的问题,并将其简化为以下问题:

如果我打开一个excel文件,则可以转到“公式”选项卡,然后单击“立即计算”,它将花费一些时间来更新所有计算。

如果我运行VBScript 只是 为了打开文件(请参见下面的代码),如果我进入“公式”选项卡并单击“立即计算”,它将立即刷新,并且没有任何变化。

Dim objXLApp, objXLWb, objXLWs

Set objXLApp = CreateObject("Excel.Application")
objXLApp.Visible = True
Set objXLWb = objXLApp.Workbooks.Open(file_path.xls)

我已经尝试过各种方法,例如:

objXLApp.Calculation = xlAutomatic
objXLApp.Calculate
objXLApp.CalculateFull
objXLApp.CalculateFullRebuild
objXLWb.RefreshAll
objXLWs.EnableCalculation = True
objXLWs.Calculate

但是,这些操作似乎与转到选项卡并单击“计算”具有相同的作用,从而导致快速刷新,而excel页面根本没有尝试更新。

使用python的win32com模块时也是如此。我无法在打开的文件中运行计算。

import win32com.client as win32

excel = win32.Dispatch('Excel.Application')
excel.Visible = True
excel_workbook = excel.Workbooks.Open(file_path.xls)

使用PowerShell也是如此。

$excel = New-Object -com excel.application
$excel.Visible = $True
$workbook = $excel.Workbooks.Open( $file_path )

那么,为什么使用这些语言打开文件会以某种方式关闭计算公式的能力?


问题答案:

我发现了问题,使用VBScript(或Powershell)打开excel页面时不会自动包含手动打开时包含的加载项,因此我需要手动添加这两个加载项。

excel.AddIns.Add("C:\Program Files (x86)\PIPC\Excel\PITrendXL.xla").Installed = True
excel.AddIns.Add("C:\Program Files (x86)\PIPC\Excel\pipc32.xll").Installed = True