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



我正在使用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)。

这不是你的问题的答案,但以下是我在源代码挖掘从谷歌工作表生成的.xlsx文件时发现的。首先使用unzip解压缩.xlsx文件,然后进入xl/worksheets/sheet1.xml或等效文件。

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

  • 最外层(顶部)从6:40进入

  • 第二(中间)级从6:13开始

  • 第三级(底部)从6:8开始

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

<cols>
<col min="6" max="8" outlineLevel="3"/>
<col min="9" max="13"  outlineLevel="2"/>
<col min="14" max="40" outlineLevel="1"/>
</cols>

需要注意的一些事项:

  • 列组从不重叠!如果这样做,它们会自动合并,这是不直观的
  • 最底层被编号为最高层。最上面的是outlineLevel#1
  • ";以上";大纲级别(编号较低)将";燕子;较低的。因此outlineLevel 1最终将跨越6:40,outlineLevel 2将跨越6:13

下面是生成的openpyxl代码:

ws.column_dimensions.group(get_column_letter(6), get_column_letter(8),outline_level=3)
ws.column_dimensions.group(get_column_letter(9), get_column_letter(13),outline_level=2)
ws.column_dimensions.group(get_column_letter(14), get_column_letter(40),outline_level=1)

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

编辑:如果你对行而不是列感兴趣,请在这里查看我的答案:https://stackoverflow.com/a/67203916/7018268

最新更新