openpyxl sheet 的第一个空行是 [] 而不是 [None]

First empty row of openpyxl sheet is [] rather than [None]

我制作了 Google 传播sheet 类似于下图并将其下载为 xlsx。

如您所见,sheet 的第一行完全是空的。

import openpyxl
import numpy as np

sheet = openpyxl.load_workbook("sheet.xlsx", read_only=True)
ws = sheet['Sheet 1']
arr = np.array([[cell.value for cell in row] for row in ws.iter_rows()])
print(arr)

我预料到了。

[[None None None None None]
 [None 1.0 1.0 1.0 1.0]
 [None 2.0 2.0 2.0 2.0]
 [None 3.0 3.0 3.0 3.0]
 [None 4.0 4.0 4.0 4.0]]

但它实际输出的是:

[list([]) list([None, 1.0, 1.0, 1.0, 1.0])
 list([None, 2.0, 2.0, 2.0, 2.0]) list([None, 3.0, 3.0, 3.0, 3.0])
 list([None, 4.0, 4.0, 4.0, 4.0])]

我试图改变它;我又添加了一个空行并再次 运行 程序:

它显​​示的是:

[list([]) list([None, None, None, None, None])
 list([None, 1.0, 1.0, 1.0, 1.0]) list([None, 2.0, 2.0, 2.0, 2.0])
 list([None, 3.0, 3.0, 3.0, 3.0]) list([None, 4.0, 4.0, 4.0, 4.0])]

第一行和第二行完全相同(全空)。但结果如下。

什么?为什么不一样?!

FIRST_ROW = list([])
SECOND_ROW = list([None, None, None, None, None])

最后我发现,当我从 load_workbook()!

中删除 read_only 参数时,它给出了预期的结果

但我需要使用 read_only 选项,因为我要加载的 xlsx 文件非常大。

在只读模式下,openpyxl returns 正是它在文件中找到的内容,第一行根本没有单元格。因为 Google Sheets 不保存工作表的尺寸,所以无法知道行的宽度。只要您打算遍历行(这是继续的最佳方式)就可以了,但是如果您想要连续的单元格数量可靠,则必须设置 min_colmax_col参数在ws.iter_rows()