首页 > 解决方案 > 如何避免使用 Openpyxl 为读取每一行制作一个平面列表?

问题描述

我正在使用openpyxl,有人可以告诉我在阅读下一行时如何制作新列表吗?

我不想有平面列表。

代码:

import openpyxl


excel_filename = "sample.xlsx"
wb = openpyxl.load_workbook(excel_filename, data_only=True)
my_sheet_name = "Sheet1"
ws = wb[my_sheet_name]

print("File: {}".format(excel_filename))
data=[]
for j in range(1, ws.max_row+1 ):
    for i in range(1,ws.max_column+1):
        ihidden = ws.row_dimensions[j].hidden
        svalue = ws.cell(column=i,row=j).value
        if ihidden == True:
            shidden = "HIDDEN"
        else:
            shidden = "VISIBLE"

            data.append(svalue)

print(data)

示例.xlsx:

在此处输入图像描述

输出:

File: sample.xlsx
[1231231, None, None, 3123, 123123, None, 123, 21322, None]

我希望它可以是:

File: sample.xlsx
[[1231231, None, None],[3123, 123123, None],[123, 21322, None]]

标签: python-3.xopenpyxl

解决方案


使用列表理解:

data = [[ws.cell(column=j,row=i).value for j in range(1,4) if not ws.row_dimensions[j].hidden] for i in range(1,4) if not ws.row_dimensions[j].hidden]
print(data)

输出

>>> [[1231231, None, None], [3123, 123123, None], [123, 21322, None]]

推荐阅读