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

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

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

ABC +---+---+----+ 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' 

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

 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']] 

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

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

附加信息:

随后我find了一个文档页面,讲述了一个merged_cells属性,可以用它来确定合并单元格的各个范围中包含的单元格。 该文件说,这是“0.6.1新版本”,但是当我试图使用它与XPP安装的xlrd-0.9.3我得到了错误

NotImplementedError:formatting_info = True尚未实现

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

 openpyxl.worksheet.merged_cell_ranges 

这个函数可以得到像['A1:M1', 'B22:B27']这样的数组,它告诉你要合并的单元格。

 openpyxl.worksheet.merged_cells 

这个函数显示一个单元格是否被合并