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

时间:2014-07-29 18:16:45

标签: python excel winapi excel-vba vbscript vba

我的脚本没有更新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 :(得分: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.

答案 1 :(得分:1)

我发现问题,用VBScript(或Powershell)打开excel页面并不会自动包含手动打开时包含的Addins,所以我需要手动添加这两个插件。

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

答案 2 :(得分:0)

尝试在其中添加模块

    Sub Auto_Open()
        ActiveWorkbook.RefreshAll
        Calculate
    End Sub