如何在启动Excel时使用openpyxl将Excel工作表中的所有列折叠全部隐藏或显示?

时间:2019-01-02 23:28:52

标签: python excel openpyxl

我正在使用openpyxl修改现有的Excel文件。在Excel文件中,有列折叠。我想编写一些代码,以便可以显示所有列折叠或隐藏所有列折叠。

我尝试使用此代码实现目标。但是,有两个问题:

ws.column_dimensions.group(start='A', end='C', hidden=False)  

首先,列已被分组。但是,仅当列尚未分组时,此代码才对我有用。 第二,隐藏参数似乎不会影响输出。实际上,无论我是否将False的标志设置为True,我都会得到一个隐藏的组。

for col in ['A', 'B', 'C']:
    ws.column_dimensions[col].hidden=False

我期望的是,它需要所有列组/折叠并关闭它们。取而代之的是,这段代码隐藏了所有列(从A到C)。

1 个答案:

答案 0 :(得分:2)

不是您问题的完全答案,但这是我对从Google表格生成的.xlsx文件进行源分割时发现的内容。首先,您使用View解压缩.xlsx文件,然后进入unzip或等效文件。

假设我要创建三个嵌套的分组列的大纲级别:

  • 最顶层(最高)来自xl/worksheets/sheet1.xml

  • 第二级(中间)来自6:40

  • 第三(下)级来自6:13

    ,它们跨越6-40列。 (列号从'A'开始为1索引)。这是xlsx文件中的代码:

6:8

一些注意事项:

  • 列组永远不会重叠!如果这样做,它们将自动合并,这是不直观的。
  • 最底层的级别被编号为最高。最重要的是outlineLevel#1
  • “上方”大纲级别(较低编号)将“吞噬”较低的大纲级别。因此,outlineLevel 1将最终跨越<cols> <col min="6" max="8" outlineLevel="3"/> <col min="9" max="13" outlineLevel="2"/> <col min="14" max="40" outlineLevel="1"/> </cols> ,而OutlineLevel 2将跨越6:40

然后是生成的openpyxl代码:

6:13

我将查看是否可以为https://stackoverflow.com/users/2385133/charlie-clark的软件包文档添加一些内容。这纯粹是xlsx规范(或行为)的细微差别,而不是openpyxl特定的。但是,最好在API中提供示例。