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