当前位置: 首页 > news >正文

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

有如下一个excel表

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

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

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

代码如下:

import xlwings as xwdef fill_missing_departments(data):result = []current_department = Nonefor row in data:if row[0] is not None:current_department = row[0]result.append([current_department, row[1], row[2]])return resultdef 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] += salaryelse:salary_sum[department] = salaryprint(salary_sum)# {'财务部': 10038.0, '市场部': 24240.0, '行政部': 14160.0, '企划部': 6728.0}summary_data = salary_sum# 将数据salary_sum写入合并单元格中# 记录哪些部门已经写入,避免写到合并单元格中间written_departments = set()# 从第2行开始遍历(假设第1行为表头)row = 2while True:dept_cell = sheet.range(f"A{row}")dept = dept_cell.valueif dept is None:# 如果整行都为空,说明已经到底了if sheet.range(f"B{row}").value is None and sheet.range(f"C{row}").value is None:breakelse:row += 1continueif 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)

运行后,直接实现了目标

相关文章:

  • 改进算法超详细:双变异樽海鞘群算法:从最优性能设计到分析
  • MySQL数据库上篇
  • 怎么实现动态提示词,并提升准确率
  • 【IPMV】图像处理与机器视觉:Lec9 Laplace Blending 拉普拉斯混合
  • 这款软件的第三方评测:功能、易用性与性能表现如何?
  • map和set的遗留 + AVL树(1):
  • K8S - StatefulSet 与 DaemonSet - 有状态应用部署与节点管理策略
  • [面试]SoC验证工程师面试常见问题(二)
  • PyTorch_创建张量
  • 浅谈SpringBoot框架中的单例bean
  • 【KWDB 创作者计划】利用KWDB解决工业物联网场景中的海量数据管理难题的思考
  • 代码随想录单调栈part2
  • C 语言 第五章 指针(6)
  • 网工_IP协议
  • 【算法基础】冒泡排序算法 - JAVA
  • 【质量管理】现代TRIZ问题识别中的功能分析——组件分析
  • 从零开始讲DDR(9)——AXI 接口MIG 使用(2)
  • 文章五《卷积神经网络(CNN)与图像处理》
  • 第 6 篇:AVL 树与 SB 树:不同维度的平衡探索 (对比项)
  • 【质量管理】现代TRIZ问题识别中的功能分析——相互接触分析
  • 贵州赤水一处岩体崩塌致4车受损,连夜抢修后已恢复通车
  • 抢抓消费旺季:五一假期,多地党政主官调研外贸优品展销活动
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 五一假期,这些短剧值得一刷
  • 上海科创再出发:“造星”的城和“摘星”的人
  • 深观察丨从“不建议将导师挂名为第一作者”说开去