手动打开excel文件允许运行公式,使用VBScript或PowerShell或Python的win32com打开excel文件则不允许

Cha*_*ton 5 python vbscript excel winapi vba

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

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

如果我运行 VBScript只是为了打开文件(请参阅以下代码),如果我转到“公式”选项卡并单击“立即计算”,它将立即刷新并且不会发生任何变化。

Dim objXLApp, objXLWb, objXLWs

Set objXLApp = CreateObject("Excel.Application")
objXLApp.Visible = True
Set objXLWb = objXLApp.Workbooks.Open(file_path.xls)
Run Code Online (Sandbox Code Playgroud)

我尝试过各种各样的东西,例如:

objXLApp.Calculation = xlAutomatic
objXLApp.Calculate
objXLApp.CalculateFull
objXLApp.CalculateFullRebuild
objXLWb.RefreshAll
objXLWs.EnableCalculation = True
objXLWs.Calculate               
Run Code Online (Sandbox Code Playgroud)

但这些似乎与进入选项卡并单击“计算”执行相同的操作,导致快速刷新,并且 Excel 页面根本不尝试更新。

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

import win32com.client as win32

excel = win32.Dispatch('Excel.Application')
excel.Visible = True
excel_workbook = excel.Workbooks.Open(file_path.xls)
Run Code Online (Sandbox Code Playgroud)

使用 PowerShell 也是如此。

$excel = New-Object -com excel.application
$excel.Visible = $True
$workbook = $excel.Workbooks.Open( $file_path )
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ton 2

我发现问题,用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
Run Code Online (Sandbox Code Playgroud)