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

发布于 2021-01-29 17:19:34

我正在尝试使用xlrd读取带有Python的Excel合并单元格。

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

    A   B   C
  +---+---+----+
1 | 2 | 0 | 30 |
  +   +---+----+
2 |   | 1 | 20 |
  +   +---+----+
3 |   | 5 | 52 |
  +---+---+----+

在此示例中,我想将第一列的第三行读取为等于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)

我得到的是:

'2', '0', '30'
'1', '20'
'5', '52'

我想要得到什么:

'2', '0', '30'
'2', '1', '20'
'2', '5', '52'
关注者
0
被浏览
182
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我只是试过了,它似乎适用于您的示例数据:

    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)
    

    返回

    [['2', '0', '30'], ['2', '1', '20'], ['2', '5', '52']]
    

    它跟踪上一行的值,如果当前行的相应值为空,则使用它们。

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

    附加信息:

    随后,我找到了一个文档页面,该页面讨论了一种merged_cells属性,可以用来确定合并的各个单元格范围中包含的单元格。文档说它是“
    0.6.1版的新功能”,但是当我尝试将其与xlrd-0.9.3一起使用时,pip出现了错误

    NotImplementedError:formatting_info =还没有实现

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看