我有一个带有一些查询的Excel xlsm文件。
目前我每天都打开它并点击"全部刷新"命令在"数据"标签。我希望自动完成此操作。我在python中写了一个脚本(我是Python的新手)。
问题是刷新数据并保存Excel文件后,刷新的数据不可见(我知道刷新有效,因为如果我阻止保存并关闭Excel文件,则刷新的数据在文件)
奇怪的是,保存也可以正常工作,因为当我尝试从' config'修改单元格B2时它改变了......
问题出在哪里?
import win32com.client
import datetime
from datetime import date, timedelta
yesterday = date.today() - timedelta(1)
office = win32com.client.Dispatch("Excel.Application")
wb = office.Workbooks.Open(r'\\server\CC_source.xlsm')
office.DisplayAlerts = True
office.Visible = True
wb.RefreshAll()
sh = wb.Worksheets("config")
sh.Cells(2,2).Value = wczoraj
wb.Close(True)
也许有人可以推荐另一个脚本?例如,Powershell? PHP? 或者是Python3的其他库?
答案 0 :(得分:1)
由于您请求了另一个脚本来执行此操作,因此我建议您使用PowerShell。作为一个简单的测试,我创建了一个Excel文档 SheetToRefresh.xlsx ,它与简单的xml文件有数据连接。但是,下面的脚本将适用于Excel文档所连接的任何数据源。我已经在自己的机器上测试了这个,数据刷新和保存仍然如预期的那样。
<强> RefreshExcel.ps1 强>
#Set the file path (can be a network location)
$filePath = "C:\Scripts\SheetToRefresh.xlsx"
#Create the Excel Object
$excelObj = New-Object -ComObject Excel.Application
#Make Excel visible. Set to $false if you want this done in the background
$excelObj.Visible = $true
#Open the workbook
$workBook = $excelObj.Workbooks.Open($filePath)
#Focus on the top row of the "Data" worksheet
#Note: This is only for visibility, it does not affect the data refresh
$workSheet = $workBook.Sheets.Item("Data")
$workSheet.Select()
#Refresh all data in this workbook
$workBook.RefreshAll()
#Save any changes done by the refresh
$workBook.Save()
#Uncomment this line if you want Excel to close on its own
#$excelObj.Quit()
答案 1 :(得分:0)
要刷新查询,然后刷新数据透视表,请在Excel中转到数据>查询和连接>右键单击查询查询属性>取消选中启用后台刷新。