之前自已写了先读取数据再用dataframe空值的识别来填充原值, 可以解决大部分问题, 今天发现如果原本表格中有空值时, 可能出现误填充, 所以还是找找其他办法来解决.
经测试, 用openpyxl可以解决这个问题
以下是合并前
from openpyxl import load_workbook
fdir = r'/Users/add58/Downloads/'
# 加载Excel文件
wb = load_workbook(fdir+'add58_wb.xlsx')
# 选择工作簿中的工作表
ws = wb['Sheet1'] # 或者使用 wb.get_sheet_by_name('Sheet1')
# 获取合并单元格的位置
merge_cell_list = [x.bounds for x in ws.merged_cells]
# 复制合并单元格的值并取消合并
for merged_cell in merge_cell_list:
# 获取合并单元格的起始和结束坐标
# col_1, row_1, col_2, row_2对就(2, 4, 3, 4) 即 B4:C4
col_1, row_1, col_2, row_2 = merged_cell
# 读取合并单元格的值
merge_cell_value = ws.cell(row=row_1, column=col_1).value
# 取消合并
ws.unmerge_cells(start_row=row_1, start_column=col_1, end_row=row_2, end_column=col_2)
# 将原合并单元格的值填入新的单元格
for row in range(row_1, row_2 + 1):
for col in range(col_1, col_2 + 1):
ws.cell(row=row, column=col, value=merge_cell_value)
# 保存工作簿
wb.save(fdir+'updated_add58_wb.xlsx')
合并后效果
做成函数
def openpyxl_unmerge_excel(file_dir,wb_name,ws_name='Sheet1'):
from openpyxl import load_workbook
unmerge_wb_name = 'unmerge_' + wb_name
# 加载Excel文件
wb = load_workbook(file_dir + wb_name)
# 选择工作簿中的工作表
ws = wb[ws_name]
# 获取合并单元格的
merge_cell_list = [x.bounds for x in ws.merged_cells]
# 复制合并单元格的值并取消合并
for merged_cell in merge_cell_list:
# 获取合并单元格的起始和结束坐标
# col_1, row_1, col_2, row_2对就(2, 4, 3, 4) 即 B4:C4
col_1, row_1, col_2, row_2 = merged_cell
# 读取合并单元格的值
merge_cell_value = ws.cell(row=row_1, column=col_1).value
# 取消合并
ws.unmerge_cells(start_row=row_1, start_column=col_1, end_row=row_2, end_column=col_2)
# 将原合并单元格的值填入新的单元格
for row in range(row_1, row_2 + 1):
for col in range(col_1, col_2 + 1):
ws.cell(row=row, column=col, value=merge_cell_value)
# 保存工作簿
wb.save(file_dir + unmerge_wb_name)