手动打开Excel文件可运行公式,但用VBScript、PowerShell或Python的win32com打开则不可

5 投票
3 回答
5378 浏览
提问于 2025-04-18 15:13

我遇到了一个问题,就是我的脚本没有更新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 )

那么,为什么用这些语言打开文件会让公式的计算功能失效呢?

3 个回答

0

试着添加一个包含以下内容的模块

    Sub Auto_Open()
        ActiveWorkbook.RefreshAll
        Calculate
    End Sub
1

试试这个。只是为了测试。

' Launch Excel...
CreateObject("WScript.Shell").Run "excel.exe"

' Wait for it to load...
WScript.Sleep 5000

' Get the running instance...
Set Excel = GetObject(, "Excel.Application")

' Open your workbook...
Excel.Workbooks.Open strPath

' Now go and click the Calculate button and see if it works.
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

撰写回答