待读取的.xlsx类型的表格中有合并单元格,为了对表格进行数据处理,需要将合并单元格进行拆分处理,所以进行如下处理:
def read_xlsx(file='./intent_data.xlsx', sheet_name=None, header=0):
"""读取 xlsx 格式文件。"""
excel = pd.ExcelFile(load_workbook(file), engine="openpyxl")
sheet_name = sheet_name or excel.sheet_names[0]
sheet = excel.book[sheet_name]
df = excel.parse(sheet_name, header=header)
for item in sheet.merged_cells:
top_col, top_row, bottom_col, bottom_row = item.bounds
base_value = item.start_cell.value
# 1-based index转为0-based index
top_row -= 1
top_col -= 1
# 由于前面的几行被设为了header,所以这里要对坐标进行调整
if header is not None:
top_row -= header + 1
bottom_row -= header + 1
df.iloc[top_row:bottom_row, top_col:bottom_col] = base_value
# 设置 pandas 输出选项以显示所有列
pd.set_option('display.max_columns', None)
# 设置 pandas 输出选项以显示所有行
pd.set_option('display.max_rows', None)
# 显示完整的 DataFrame
# print(df)
# 将 DataFrame 写入 Excel 文件
df.to_excel(file.replace('.xlsx', '_split.xlsx'), index=False, engine="openpyxl") # 如果您不希望保存索引,请将 index 参数设置为 False