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()
反斜杠不能省略