使用xlwings计算合并单元格的求和

有如下一个excel表

表内有合并单元格,现在需要求和,不能直接下拉填充公式怎么办?

通常的办法是先取消合并单元格,计算后,再次合并单元格,比较繁琐。

在此,尝试使用python和xlwings运行直接给出想要的结果。

代码如下:

import xlwings as xw


def fill_missing_departments(data):
    result = []
    current_department = None
    for row in data:
        if row[0] is not None:
            current_department = row[0]
        result.append([current_department, row[1], row[2]])
    return result


def sum_salaries_by_department(file_path):
    # 打开Excel工作簿
    wb = xw.Book(file_path)
    sheet = wb.sheets[0]  # 假设数据在第一个sheet中

    # 获取数据范围
    data_range = sheet.range('A2:C9').value  # 假设数据在这个范围内

    print(data_range)
    # [['财务部', '张三', 4586.0], [None, '清风', 5452.0], ['市场部', '李四', 6589.0], [None, '李白', 8728.0], [None, '青州', 8923.0], ['行政部', '郭靖', 8192.0], [None, '黄蓉', 5968.0], ['企划部', '吴勇', 6728.0]]
    filled_data = fill_missing_departments(data_range)
    print(filled_data)
    # [['财务部', '张三', 4586.0], ['财务部', '清风', 5452.0], ['市场部', '李四', 6589.0], ['市场部', '李白', 8728.0], ['市场部', '青州', 8923.0], ['行政部', '郭靖', 8192.0], ['行政部', '黄蓉', 5968.0], ['企划部', '吴勇', 6728.0]]
    # 创建部门薪资汇总字典
    salary_sum = {}
    for row in filled_data:
        department = row[0]
        salary = row[2]
        if department in salary_sum:
            salary_sum[department] += salary
        else:
            salary_sum[department] = salary

    print(salary_sum)
    # {'财务部': 10038.0, '市场部': 24240.0, '行政部': 14160.0, '企划部': 6728.0}
    summary_data = salary_sum

    # 将数据salary_sum写入合并单元格中
    # 记录哪些部门已经写入,避免写到合并单元格中间
    written_departments = set()

    # 从第2行开始遍历(假设第1行为表头)
    row = 2
    while True:
        dept_cell = sheet.range(f"A{row}")
        dept = dept_cell.value
        if dept is None:
            # 如果整行都为空,说明已经到底了
            if sheet.range(f"B{row}").value is None and sheet.range(f"C{row}").value is None:
                break
            else:
                row += 1
                continue

        if dept in summary_data and dept not in written_departments:
            sheet.range(f"D{row}").value = summary_data[dept]
            written_departments.add(dept)

        row += 1

    # 保存工作簿
    wb.save()
    wb.close()


my_xlsx_path = '合并单元格的求和.xlsx'
sum_salaries_by_department(my_xlsx_path)

运行后,直接实现了目标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值