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_col
和 max_col
参数在ws.iter_rows()
我制作了 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_col
和 max_col
参数在ws.iter_rows()