我使用openpyxl在.xlsx
Python
文件的工作。
我从我想标题字段和列宽的名单由我的脚本生成的文件中使用sample.xlsx
文件。
起初,我创建一个列名称及其相应宽度的列表。所以我使用:
filter_list = {"name": [], "width": []}
row_count = sheet.max_row
for i in range(row_count):
cell = sheet.cell(row, i + 1)
if cell.value:
filter_list["name"].append(cell.value)
filter_list["width"].append(sheet.column_dimensions
[cell.column].width)
值来获得列的宽度,然后我设置相同的值:
if filter_list["width"][i] is not None:
sheet.column_dimensions[cell.column].width = filter_list["width"][i]
如果一个特定的列有一个非默认值(即不是无)它工作正常。当我打开输出文件(Mac和Windows上),我看到这个特定列的宽度是这两个文件是相同的。
但是,如果列中的一个具有...宽度= None
在输入文件(以便输出文件具有用于列宽参数相同None
值)在输出文件中同一列看起来不同。
关于为什么会发生什么想法吗?
它看起来像某处.xlsx
有一个参数,该参数以某种方式定义了默认宽度(=无值)被设定为。
有没有什么办法,使这两个文件看起来相同的列宽的条款?
更新:我添加了None
的宽度值的检查。我只设置有不None
值列的列宽参数。结果还是一样 - 文件在默认宽度方面不同。
更新2:我已经更新的代码,以显示我究竟是如何读取和设置列宽。
在回答第一位:没有,不知道为什么会发生
但在回答第二,在我看来是作为也很简单:
if mywidth is not None:
output_sheet.column_dimensions['A'].width = mywidth
即,在通过所有列的循环只是检查列的宽度实际上是定义。如果将其应用到新的工作表,如果没有的话就忽视它。
NB是column_dimensions
(复数)不是单一版本
编辑问题的更新后:
的方式,使用默认列宽的Excel交易是在工作表上的水平。说完看着一对夫妇使用OpenXML tools然后过与openpyxl docs参考基本的Excel工作簿的它似乎是你可能是以下后:
wb1 = load_workbook("my/workbook/name.xlsx")
ws1 = wb1.active
default_col_width = ws1.sheet_format.defaultColWidth
另外,一旦你已经打开了新的工作簿转到Home
标签,Cells
部分,单击Format
按钮并选择Default width...
并将其设置为你想要的。
如果列维度具有None
的宽度,Excel的默认0
,而不是默认列宽的工作表。 openpyxl试图通过创建它们,如果它们不存在,使其易于访问的尺寸。所以,你的代码是创造一些与这两个文件width=None
,但是当你保存文件这样的效果只有变得可见。
你的情况,你应该能够通过与第一个文件的尺寸明确努力避免的问题:
for k, cd in ws1.column_dimensions.items():
ws2.column_dimensions[k].width = cd.width