openPyXL – 在取消合并期间将值赋给单元格范围

所以我有excel文件,每个文件有几张,我正在处理脚本,它将从选定的表格收集数据,如果它们存在于文件中,并将它合并成一个大的表格。 一般来说,它正在工作,迭代通过文件,如果需要的工作表存在,它发现数据单元格的范围,并将其附加到数据框。 我现在需要做的事情是将标题行(列名称)添加到Dataframe,但在表单中是多行标题。

为了使它看起来在数据框中相同,我需要在顶部标题行中取消合并单元格,并将第一个单元格的值复制到先前合并的范围中的其余部分。

我使用OpenPyXL来访问Excel表。 我的function只接受表单作为参数。 它看起来像这样:

def checkForMergedCells(sheet): merged = ws.merged_cell_ranges for mergedCell in merged: mc_start, mc_stop = str(mergedCell).split(':') cp_value = sheet[mc_start] sheet.unmerge_cells(mergedCell) cell_range = sheet[mergedCell] for cell in cell_range: cell.value = cp_value 

事情是,cell_range返回一个元组,最终得到错误消息:

AttributeError:“元组”对象没有属性“值”下面你可以看到debugging过程中的screencap显示了在每个variables中传递的值。

debugging器正在运行

通过索引访问通常会返回一个元组元组,除非您尝试获取单个单元格或行。 对于编程访问,您应该使用iter_rows()iter_cols()

你可能想花一些时间看utils模块。

 from openpyxl.utils import range_boundaries for group in ws.merged_cell_ranges: min_col, min_row, max_col, max_row = range_boundaries(group) top_left_cell_value = ws.cell(row=min_row, column=min_col).value for row in ws.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row): for cell in row: cell.value = top_left_cell_value