我的问题是:我有一个8000行80列的Excel文件。我导入了带有Pandas的excel文件。我在Pandas数据框上做了一些计算和处理。我可以处理Pandas,没有任何问题。到目前为止一切顺利。然后我用xlwings打开一个excel文件,并将数据框值粘贴到excel文件上,在那里我对颜色设置了条件。例如,只粘贴白色单元格(rgb=(255,255,255)).这就是为什么我使用xlwings而不是pd.to_excel,因为我总是可以保持我的基本excel文件的格式(颜色等...)。
example of code : ws is the worksheet and df the dataframe
import xlwings as xw
xw.App(visible=False,spec=None, impl=None).screen_updating=False
wb=xw.Book('input_path')
wb.app.calculation='manual'
ws=wb.sheets['sheet1']
rgb_tuple=(255,255,255)
for i in range(80000):
for j in range(80):
if ws.range((i+1,j+1)).color==rgb_tuple:
ws.range((i+1,j+1))=df.iloc[i,j]
wb.save('output_name')
wb.close()
xw.screen_updating=True
注意:这段代码只是我所做的一个例子
它需要超过30分钟的时间来运行。它比VBA慢得多。我使用screen_updating=False和visible=False。我希望这会有所帮助,但它仍然非常慢。请问,你知道一个选项,把xlwings,使它更快或另一个库,做同样的工作,但更快?
多谢了。
1条答案
按热度按时间sczxawaw1#
如果你想用xlwings一次阅读多个单元格(例如,如果你想逐行迭代),你可以使用
sheet.range()
返回xlwings.Range
对象,然后用raw_value
属性一次访问所有范围值:raw_value
是表示具有适当Map类型的行和列的元组的元组(float
、str
等)。文件:https://docs.xlwings.org/en/stable/api.html#xlwings.Range