【问题标题】:Python: Write Data to Columns in Protected .xlsm Excel FilePython:将数据写入受保护的 .xlsm Excel 文件中的列
【发布时间】: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


【解决方案1】:

您不能使用 xlwings 遍历单个单元格。如果您将数组直接分配给一个单元格,它将足够快,例如wb.sheets[0].range('A1').value = my_dataframe。见:https://docs.xlwings.org/en/stable/datastructures.html

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2013-11-09
    • 2016-06-21
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多