Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 虚假的';无';openpyxl在列的开头加载的单元格_Python_Excel_Openpyxl - Fatal编程技术网

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

Python 虚假的';无';openpyxl在列的开头加载的单元格,python,excel,openpyxl,Python,Excel,Openpyxl,我一直在用python编写一个函数,使用openpyxl库,它将从工作簿中的指定工作表加载列,并在返回列表或numpy数组中的列之前进行一些数据调整 要加载列,我将加载工作簿,获取目标工作表,存储列,然后简单地遍历每一列并将单元格内容附加到列表中: #open the excel file wb = openpyxl.load_workbook(fname, read_only = True) print('\nWorkbook "%s" open...' % (fnam

我一直在用python编写一个函数,使用
openpyxl
库,它将从工作簿中的指定工作表加载列,并在返回列表或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)
某些列将在其各自列表的开头加载多个与excel文件中的数据不对应的
None
元素。例如,一个列的开头有两个空单元格(由于标题空间或其他原因而留空),该列在其列表的开头应该加载两个
None
元素,但它可能加载五个或六个
None
元素,而不是两个

每次运行函数时都是一致的。同样的列每次都会有这个问题,这让我觉得excel表中有某种隐藏的数据。我试着清理那些原本应该是空的但运气不佳的细胞


熟悉
openpyxl
模块或excel的人有没有想过为什么这些神秘的额外
None
元素会进入导入的数据?

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


ws.rows
ws.columns
是为了方便而提供的,但是你几乎总是能更好地使用
ws.get_squared_range(…)
这应该不会给你什么惊喜。

如果cell==None:cell=”“有效吗?是的,我可以处理这些额外的
None
s,但是我想,就像把他们全部除掉。但当列中有实际的空单元格时,我需要保留它们。我不能弹出所有的
None
s,因为在列的开头或整个实际数据中可能有真正的空单元格,我希望能够比较多个列。跨列的元素必须具有相同的索引。好的,如果我读取正确,那么实际数字将替换为
None
s。有趣。没有无效字符?没有,非空单元格没有被
None
s替换。在列的开头导入了额外的
None
s。例如,数据从第三行开始的列,开头有两个空单元格,可能会有5或6个
None
s,而不是2.Hmm,但您必须提供
ws.get_squared_range()
范围的“坐标”。如果你不认识他们,这看起来像:
ws.get\u squared\u range(ws.min_列、ws.min_行、ws.max_列、ws.max_行
,对吗?调用
min_列
之类的函数不需要自动检测范围边缘吗?为什么
ws.columns
不能运行相同的例程来找到列正确的开始位置?这是一个很好的技巧。我将代码更改为first I。)确定目标范围,然后使用
ws.iter\u行(range\u string=…)
对其进行迭代。使用
ws.get\u squared\u range(…)
ws.rows
ws.columns
是微妙的。列或行将始终返回完整的行或列,因此可能会在这些行或列的开头创建空单元格,而
ws.get_squared_range(…)
将只返回范围内的单元格。