0
点赞
收藏
分享

微信扫一扫

xlwings 合并相邻相同元素的单元格

吴陆奇 2023-09-06 阅读 58

import pandas as pd
import xlwings as xw
# 先按分类列进行排序, 使相同元素相邻, 以供合并单元格
df = pd.DataFrame({'分类': ['A', 'A', 'B', 'B', 'C', 'C'], '重量': [0, 1, 10, 11, 20, 21]})
# 使用xlwings
# 将df保存在工作簿'D:test.xlsx'的工作表'工作表1'中
# 自动将df['分类']列中的相邻的相同元素_合并单元格

app = xw.App(visible= True, add_book= True)
app.display_alerts = False  # 关闭操作警告
app.screen_updating = True
wb = app.books[0]
sht = wb.sheets[0]
sht.name = '工作表1'
# 写入表格, 无行索引
sht.cells(1, 1).options(index=False).value = df
# 获取分类列的范围(除了列标题)
range_a = sht.cells(2, 1).expand('down')  # <Range [工作簿1]工作表1!$A$2:$A$7>
# range_a.value  # ['A', 'A', 'B', 'B', 'C', 'C']

# 合并相邻相同元素的单元格
# 取唯一值
list_sorted = sorted(set(range_a.value), key=range_a.value.index)
# 取相邻相同元素的索引位置
dict_example = {key+ 2: value for key, value in enumerate(range_a.value)}  # excel行索引=python行索引+ 2  # (除了列标题)
for i in list_sorted:
    dict_i = {key: value for key, value in dict_example.items() if (value == i)}
    index_start = list(dict_i.keys())[0]
    index_stop = list(dict_i.keys())[-1]
    print(sht.range((index_start, 1),(index_stop, 1)))
    sht.range((index_start, 1),(index_stop, 1)).api.Merge()

wb.save(r'D:\test.xlsx')
wb.close()
app.kill()

反斜杠不能省略

举报

相关推荐

0 条评论