python 如何使xlwings更快或找到另一种选择?

qybjjes1  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(136)

我的问题是:我有一个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,使它更快或另一个库,做同样的工作,但更快?
多谢了。

sczxawaw

sczxawaw1#

如果你想用xlwings一次阅读多个单元格(例如,如果你想逐行迭代),你可以使用sheet.range()返回xlwings.Range对象,然后用raw_value属性一次访问所有范围值:

import xlwings as xw

for row in range(1, 10000):
   r = sheet.range((row, 2), (row, 45))
   values = [r.raw_value[0][x] for x in [1,2,3,7,8,9]]

raw_value是表示具有适当Map类型的行和列的元组的元组(floatstr等)。
文件:https://docs.xlwings.org/en/stable/api.html#xlwings.Range

相关问题