我刚试过,似乎对你的样本数据有效: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']]
它跟踪前一行的值,如果当前行的相应值为空,则使用这些值。
请注意,上面的代码不会检查给定单元格是否实际是合并单元格集的一部分,因此在单元格应该为空的情况下,它可能会复制以前的值。不过,这可能会有所帮助。
附加信息:
随后,我找到了一个文档页面,其中讨论了一个^{}属性,可以用来确定包含在各种合并单元格范围中的单元格。文档中说它是“0.6.1版中的新版本”,但是当我试图将它与由pip安装的xlrd-0.9.3一起使用时,出现了错误NotImplementedError: formatting_info=True not yet implemented
我并不特别倾向于开始寻找不同版本的xlrd来测试merged_cells特性,但是如果上面的代码不足以满足您的需要,并且您遇到了与我使用formatting_info=True时相同的错误,那么您可能会感兴趣这样做。