【发布时间】:2019-05-07 05:18:24
【问题描述】:
我有一个受密码保护的 .xlsm 文件,其中包含一些列和宏中的公式。
我有没有办法将 pandas 中的数据写入此 .xlsm 文件中的特定列?
我试过 xlwings,但更新 10k 行需要 15 分钟,即使 Application.ScreenUpdating = False。
目前我正在使用如下所示的函数:
import xlwings as xw
def enter_data(path, sheetname, start_column, df):
wb = xw.Book(path)
ws = wb.sheets[sheetname]
for i in range(len(df.columns)):
column = chr(ord(start_column)+i)
for index, row in df.iterrows():
cell = column.upper() + str(index + 3)
ws.range(cell).value = row[i]
wb.save(path)
wb.close()
我知道一种解决方法,其中我将 pandas 数据框保存到 csv,并将 csv 复制粘贴到受密码保护的 .xlsm 文件,但如果可能的话,我对全自动过程感兴趣。
谢谢!
【问题讨论】:
-
我不熟悉
xlwings。如果有特定的标签,我建议你删除dataframe,如果有的话,用这个标签替换。如果不是,我不清楚密码保护对运行时的意义是什么。另外,我不希望数据大小有这种运行时间。是否有某种动画正在播放? -
@roganjosh 感谢您的建议。据我所知,
xlwings可以编辑带有密码保护的文件,这与 pandas 不同。我试图通过在 excel 中将公式设置为manual并关闭screen_updating来避免动画。 -
@SAKURA 您不得使用 xlwings 循环遍历单个单元格。如果您将数组直接分配给一个单元格,它将足够快,例如
wb.sheets[0].range('A1').value = my_dataframe。见:docs.xlwings.org/en/stable/datastructures.html -
@FelixZumstein 谢谢,请在此处发布答案,以便我接受。
-
@SAKURA 做到了。
标签: python excel pandas xlwings xlsm