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

新手上路,请多包涵

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

我的 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'

原文由 Antoine 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 904
2 个回答

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

 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=True 尚未实施

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

原文由 Gord Thompson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题