虚假的'无'由openpyxl在列的开头加载的单元格

时间:2016-02-15 16:46:39

标签: python excel openpyxl

我一直在使用openpyxl库在python中处理函数,它将从工作簿中的指定工作表加载列并在返回列表或numpy数组中的列之前进行一些数据调节

要加载列,我要加载工作簿,获取目标工作表,存储列,然后只需遍历每一列并将单元格内容附加到列表中:

    #open the excel file
    wb = openpyxl.load_workbook(fname, read_only = True)
    print('\nWorkbook "%s" open...' % (fname))

    #get the target sheet
    sh = wb.get_sheet_by_name(sheet)
    print('Sheet "%s" aquired...' % (sheet))

    #store only the desired columns of the sheet
    sheetcols = sh.columns
    columns = [[] for i in range(L)]
    for i in range(L):
        columns[i] = sheetcols[cols[i] - 1]

    #read selected columns into a list of lists
    print('Parsing desired columns of data...')
    data = [[] for i in range(L)]
    #iterate over the columns
    for i in range(L):
        #iterate over a specific column
        print(len(columns[i]))
        for j in range(len(columns[i])):
            #store cell contents as a string (for now)
            data[i].append(columns[i][j].value)

某些列会在各自列表的开头加载多个None元素,这些元素与excel文件中的数据不对应。例如,一个开头有两个空单元格的列(由于标题空间或其他原因而留空)预计会在其列表的开头加载两个None元素,但它可能加载五或六个{{ 1}}元素而不仅仅是两个...

每次运行该功能时都是一致的。相同的列每次都会出现这个问题,这让我觉得excel表中有一些隐藏的数据。我已经尝试清除那些应该是空的但没有运气的细胞内容。

是否有人更熟悉None模块或者只是excel有关于为什么这些神秘的额外openpyxl元素会进入导入数据的想法?

1 个答案:

答案 0 :(得分:1)

代码不完整但可能值得注意的是,缺少单元格的工作表的行为必然有些不可预测。例如,如果工作表中只有D3:G8单元格中的值,那么它的列应该是什么? openpyxl将为任何给定范围按需创建单元格,我怀疑这是您可能会看到的。

ws.rowsws.columns是方便提供的,​​但您几乎总是更好地使用ws.get_squared_range(…),这应该会给您带来一些惊喜。