为什么我无法在pandas为我创建的xlsxwriter对象上冻结窗格?

7 投票
1 回答
2720 浏览
提问于 2025-04-18 18:23

我有一个类,这个类的对象里包含了 pandas 数据框(self.before 和 self.after),还有一个 save() 方法,用来用 xlsxwriter 导出数据(这个数据有两个工作表,分别是“before”和“after”)。我想要 冻结窗格(之后我还想用 条件格式化)。

虽然我知道你 不能改变已经写入的单元格样式,但这两个操作是在工作表层面进行的,所以应该可以在之后设置。

这是代码:

def save():
    writer = pd.ExcelWriter(self.path, engine='xlsxwriter')
    self.before.to_excel(writer, "before")
    self.after.to_excel(writer, "after")

    for sht_name in writer.sheets:
        ws = writer.sheets[sht_name]
        ws.freeze_panes=(2,0)

    writer.save()

保存的工作表的窗格并没有被冻结。我在使用 xlsxwriter(不使用 pandas)时成功地用了这个方法,并且我是按照 这个 pandas-charts 文档 的思路来做的,它似乎只是从写入对象中获取底层的 xlsxwriter 对象并对其进行操作。

你有什么想法,为什么我在这里没有得到想要的结果吗?

如果出于某种原因这无法实现,我当然可以从数据框中单独获取表格的值,但乍一看这似乎有点过于复杂。

1 个回答

10

好的,经过一番自我折磨我终于找到了问题所在:

正确的写法是:

ws.freeze_panes(2,0)

我当时是在设置一个(新的)属性(可能是覆盖了方法),而不是在调用工作表对象的方法。

一旦我纠正了这个问题,它就正常工作了。

很高兴这个解决方案这么简单……

撰写回答