如何在不打开文件的情况下更新 Excel 文件(数据刷新和更新公式)?

Ale*_*lex 5 script automation microsoft-excel microsoft-excel-2010

我有一个 Excel 文件,想要自动更新和保存,而不必打开它或手动与之交互。手动,我打开文件并点击数据刷新,然后执行 SQL 查询,然后点击 F9 以更新公式,然后我只是关闭/保存。

(然后我会使用 perl 脚本将文件邮寄给人们,或者使用 SAS JMP 运行一些数字/图表并将它们邮寄出去。基本上我需要编写一些需要更新 XLS 文件的内容。)

小智 5

我的解决方法是在 Excel 文件中记录一个宏(因此您必须使用 .xlsm 文件扩展名)(首先您需要转到程序 >> Windows Powershell 并在提示符下键入Set-ExecutionPolicy RemoteSigned以允许脚本运行):

Sub AutoUpdate()
'
' AutoUpdate Macro
' data refresh from MSQuery connection

'
    Sheets("Feuill1").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub
Run Code Online (Sandbox Code Playgroud)

然后我使用一个 Powershell 脚本来解决这个问题:打开 Excel 文件,调用宏,保存并关闭文件。在本例中,我出于安全/备份目的制作了原始文件的副本,但当然您可以保存原始文件本身。

$objectExcel = new-object -c excel.application
$objectExcel.displayAlerts = $false # don't prompt the user
#$objectExcel.visible = $True;
$Classeur = $objectExcel.workbooks.open("source_filepath", $null, $true)
$objectExcel.run("AutoUpdate")
# $objectExcel.run("RemoveODBC") # another custom macro for removing data connexion
$Classeur.saveas("destination_filepath")
$Classeur.close($false)
#$objectExcel.visible = $False;
$objectExcel.quit()
spps -n excel
Run Code Online (Sandbox Code Playgroud)

因此,我的 Excel 报告每天都会通过调用上述脚本的 Windows Planified 任务刷新,无需任何人工干预。


Ale*_*lex 3

我最终找到了Win32::Excel::Refresh,它符合要求。它是一个 Perl mod,但它还附带一个 Windows 可执行文件,如果您不知道/想处理 Perl,则可以运行它。