我试图在网上找到答案,但只是感到困惑。 我是一个Windows用户,拥有Python 2.7并使用保存在sharepoint上的Excel 2010文件,尝试自动化数据提取。基本上,我的单人纸牌程序逐个打开文件,提取数据并将它们保存到新的xl文件中。 到目前为止,我已经使用了xlwt和xlrd,一切都很顺利。但是现在我遇到了一个文件xlsm,其中包含每次都需要刷新的数据透视表。我搜索了它并找到了代码:Python: Refresh PivotTables in worksheet 问题是它对我来说根本不起作用......我不断得到像
这样的属性错误AttributeError:.Open
我注意到语法也大不相同(wb.Sheets.Count与wb.nsheets)。使用win32com我甚至无法遍历工作簿的表单...我只是不知道什么是问题 - Python版本,导入问题或者其他什么...... 我在xlrd / xlwt中找不到的东西:ws.PivotTables(j).PivotCache()。Refresh() - 如果我没弄错,问题是用xlrd / xlwt我实际上并没有打开Excel文件,所以可能用它们刷新数据是不可能的...唉,转向win32com.client还没有帮助...... 有什么建议或链接吗? :)我可能会在有问题的xl文件的VBA代码中添加自动更新(刷新),但我不想更改文件,而是我的代码:)
编辑:我粘贴下面的代码,以及我一直收到的错误: 从别人的代码复制的以下内容不起作用,返回 AttributeError:Property' Excel.Application.Visible'无法设置。:
import win32com.client
import os
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.workbooks.open("//some_dir.xlsm")
xl.Visible = True
wb.RefreshAll()
xl.Quit()
当我尝试将它合并到一个同时使用xlrd和xlwt的程序时,它不起作用......
from copy import deepcopy
from xlrd import open_workbook
from xlutils.copy import copy as copy
from xlwt import *
from datetime import *
#some definitions here...
rb = open_workbook('my_template.xlsx')
wb = copy(rb)
sheet_1 = wb.get_sheet(0)
sheet_2 = wb.get_sheet(1)
#now the code that evaluates the dates:
import datetime
ys = raw_input('year in yyyy format:\n')
ms = raw_input('month in mm format:\n')
ds = raw_input('day in dd format:\n')
#here the definitions concerning dates are called, all in xlwt and xlrd
#now other files are being opened and data extracted and written into sheet_1 and sheet_2
#now it's time for refreshments ;) - I wanted to 1. open and update the file with win32com, #close it and 2. with xlrd get the data from the updated file:
#refreshing all (preparing file)
import win32com.client
import os
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.workbooks.open("some_dir.xlsm") #it is a shared file saved in intranet
xl.Visible = True
wb.RefreshAll()
xl.Quit()
print 'file refreshed'
file = open_workbook("some_dir.xlsm")
row_sheet1 = 176
row_sheet2 = 248
for sheet in file.sheets():
print sheet.name
#... the rest of the code ensues
错误再次出现: AttributeError:Property' Excel.Application.Visible'无法设置。
我想我不应该同时使用xlrd和win32com.client而我的整个想法只是如此woooong? ;)但为什么它不起作用"单独",我的意思是第一个,短代码?