关于excel多级表头合并问题python解决方案

如何把excel多级表头合并为一行,解决方案。
1.把两行内容用连接符合并为一行,如逗号或空格
2.把第二行非空内容合并到第一行

1,2 差不多吧,就是第一行,第二行 内容合并在一起,一个有连接符,一个没有
给你一个合并A1,A2单元格,逗号分隔的例子

import openpyxl
import pandas as pd
 
path1='D:/D1.xlsx'
path2='D:/D.xlsx'
book = openpyxl.load_workbook(path1)
wb = book.active
str1=wb.cell(1,1).value+','+wb.cell(2,1).value
wb.merge_cells("A1:A2")
wb.cell(1,1,value=str1)
book.save(path2)
book.close()

做了修改,增加了注释,并且,过滤掉为空的单元格

先安装 xlwings,并引入

img


import xlwings as xw

file_string = r"..\files\demo.xlsx"

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    app = xw.App(visible=False, add_book=False)
    app.display_alerts = False
    app.screen_updating = False
    wb = app.books.open(file_string)
    try:
        sht = wb.sheets[0]
        rng = sht['A1:D2']  # 取出 A1:D2 单元格内的数据
        s = ''
        for i in range(0, len(rng.value)):  # 循环行
            s += ','.join(
                filter(lambda x: x != 'None', map(str, rng.value[i]))) + ' '  # 把行数据先转str,然后去除为None的单元格,剩余的用逗号拼接
        # list(map(lambda x: print_str(x), rng))

        sht.range('E1:H2').clear()  # 清空 E1:H2
        sht.range('E1:H2').merge()  # 合并 E1:H2
        sht.range('E1').value = s  # 把合并的内容 填写在合并后的单元格内
        wb.save()
        print(s)
        wb.close()
        app.quit()
    except Exception as e:
        print(e.args)
        wb.close()
        app.quit()

img


import xlwings as xw
 
file_string = r"g:\桌面\1.xlsx" #修改为实际路径及文件名
 
if __name__ == '__main__':
    app = xw.App(visible=True, add_book=False)
    app.display_alerts = False
    app.screen_updating = False
    try:
        wb = app.books.open(file_string)
        sht = wb.sheets[0]
        rng = sht['A1:F2']

        for j in range(0,len(rng.value[0])): #取第一行的数据
            sht.range((5,j + 1)).value = rng.value[0][j]
            if rng.value[0][j] is None and j > 0:
                sht.range((5,j + 1)).value = rng.value[0][j - 1]

            if rng.value[1][j] != None: #合并第二行
                sht.range((5,j + 1)).value = sht.range((5,j + 1)).value + rng.value[1][j]
 
        wb.save()
        wb.close()
    except:
        print("Unexpected error:", sys.exc_info()[0])   
    app.quit()
input()