使用Python在Excel中读取合并的单元格

Ant*_*ine 11 python excel xlrd cell

我正在尝试使用xlrd读取Excel的合并单元格.

我的Excel :(请注意,第一列合并在三行中)

    A   B   C
  +---+---+----+
1 | 2 | 0 | 30 |
  +   +---+----+
2 |   | 1 | 20 |
  +   +---+----+
3 |   | 5 | 52 |
  +---+---+----+
Run Code Online (Sandbox Code Playgroud)

我想在这个例子中读取第一列的第三行等于2,但它返回''.你知道如何获得合并单元格的价值吗?

我的代码:

all_data = [[]]
excel = xlrd.open_workbook(excel_dir+ excel_file)
sheet_0 = excel.sheet_by_index(0) # Open the first tab

for row_index in range(sheet_0.nrows):
    row= ""
    for col_index in range(sheet_0.ncols):
        value = sheet_0.cell(rowx=row_index,colx=col_index).value             
        row += "{0} ".format(value)
        split_row = row.split()   
    all_data.append(split_row)
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

'2', '0', '30'
'1', '20'
'5', '52'
Run Code Online (Sandbox Code Playgroud)

我想得到什么:

'2', '0', '30'
'2', '1', '20'
'2', '5', '52'
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 13

我刚试过这个,它似乎适用于您的示例数据:

all_data = []
excel = xlrd.open_workbook(excel_dir+ excel_file)
sheet_0 = excel.sheet_by_index(0) # Open the first tab

prev_row = [None for i in range(sheet_0.ncols)]
for row_index in range(sheet_0.nrows):
    row= []
    for col_index in range(sheet_0.ncols):
        value = sheet_0.cell(rowx=row_index,colx=col_index).value
        if len(value) == 0:
            value = prev_row[col_index]
        row.append(value)
    prev_row = row
    all_data.append(row)
Run Code Online (Sandbox Code Playgroud)

回国

[['2', '0', '30'], ['2', '1', '20'], ['2', '5', '52']]
Run Code Online (Sandbox Code Playgroud)

它跟踪前一行的值,并在当前行的相应值为空时使用它们.

请注意,上面的代码不会检查给定单元格是否实际上是合并的单元格集的一部分,因此在单元格确实为空的情况下,它可能会复制先前的值.不过,它可能会有所帮助.

附加信息:

我随后找到了一个文档页面,其中讨论了merged_cells可用于确定包含在各种合并单元格范围内的单元格的属性.文档说它是"0.6.1版本中的新功能",但当我尝试使用xlrd-0.9.3安装时,pip我得到了错误

NotImplementedError:formatting_info = True尚未实现

我并不是特别倾向于开始追逐不同版本的xlrd来测试该merged_cells功能,但如果上述代码不足以满足您的需求并且遇到与我相同的错误,您可能会对此感兴趣formatting_info=True.