使用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)

运行后,直接实现了目标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[创业之路-354]:农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构

农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构 从游牧到定居,从蒸汽轰鸣到算法洪流,人类文明的每一次跨越都伴随着生产关系的剧烈震荡。四次工业革命的浪潮不仅重塑了物质世界的生产方式,更将人类推向了身份认同与存在…

LeetCode 2302.统计得分小于 K 的子数组数目:滑动窗口(不需要前缀和)

【LetMeFly】2302.统计得分小于 K 的子数组数目:滑动窗口(不需要前缀和) 力扣题目链接:https://leetcode.cn/problems/count-subarrays-with-score-less-than-k/ 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说&…

kafka学习笔记(四、生产者(客户端)深入研究(二)——消费者协调器与_consumer_offsets剖析)

1.消费者协调器和组协调器 如果消费者客户端中配置了多个分配策略,则多消费者的分区分配交由消费者协调器和组协调器来完成,他们之间使用一套组协调协议进行交互。 1.1.在均衡原理 将全部消费者分成多个子集,每个消费者组的子集在服务中对…

快速将FastAPI接口转为模型上下文协议(MCP)!

fastapi_mcp 是一个用于将 FastAPI 端点暴露为模型上下文协议(Model Context Protocol, MCP)工具的库,并且支持认证功能。 环境macbook,python3.13 pip install fastapi uvicorn fastapi-mcp 代码 from fastapi import FastAPI, …

实验数据的转换

最近做实验需要把x轴y轴z轴的数据处理一下,总结一下解决的方法: 源文件为两个txt文档,分别为x轴和y轴,如下: 最终需要达到的效果是如下: 就是需要把各个矩阵的数据整理好放在同一个txt文档里。 步骤① …

第Y3周:yolov5s.yaml文件解读

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 本次任务:将yolov5s网络模型中的第4层的C3x2修改为C3x1,第6层的C3x3修改为C3x2。 首先输出原来的网络结构: from n pa…

Ansible安装配置

一、前提 服务器操作系统均为centos7.9 主机ipmaster(Ansible管理端)172.25.192.2node1172.25.192.10node2172.25.192.3 更新/etc/hosts文件 二、安装 master节点: 1. 安装epel源 yum install -y epel-release 2. 安装Ansible yum install -y ansible A…

MySQL中ROW_NUMBER() OVER的用法以及使用场景

使用语法 ROW_NUMBER() OVER ([PARTITION BY partition_column1, partition_column2, ...]ORDER BY sort_column1 [ASC|DESC], sort_column2 [ASC|DESC], ... )PARTITION BY:将数据按指定列分组,每组内单独生成行号。ORDER BY:决定组内行号的…

【人工智能】释放本地AI潜能:LM Studio用户脚本自动化DeepSeek的实战指南

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大型语言模型(LLM)的快速发展,DeepSeek以其高效的性能和开源特性成为开发者关注的焦点。LM Studio作为一款强大的本地AI模型管理工具…

笔试强训:Day3

一、牛牛冲钻五&#xff08;模拟&#xff09; 登录—专业IT笔试面试备考平台_牛客网 #include<iostream> using namespace std; int main(){int t,n,k;string s;cin>>t;while(t--){cin>>n>>k>>s;int ret0;//统计加了多少星for(int i0;i<n;i)…

语音识别质量的跟踪

背景 这个项目是用来生成结构化的电子病历的。数据的来源是医生的录音。中间有一大堆的处理&#xff0c;语音识别&#xff0c;关键字匹配&#xff0c;结构化处理&#xff0c;病历编辑......。最多的时候给上百家医院服务。 语音识别质量的跟踪 一、0225医院的训练后的情况分…

人工智能搜索时代的SEO:关键趋势与优化策略

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;搜索引擎的运作方式正在经历前所未有的变革。2025年&#xff0c;AI驱动的搜索&#xff08;如谷歌的AI概览、ChatGPT搜索和必应的AI增强功能&#xff09;不仅改变了用户获取信息的方式&#xff0c;还为SEO从业…

Node.js心得笔记

npm init 可用npm 来调试node项目 浏览器中的顶级对象时window <ref *1> Object [global] { global: [Circular *1], clearImmediate: [Function: clearImmediate], setImmediate: [Function: setImmediate] { [Symbol(nodejs.util.promisify.custom)]: [Getter] }, cl…

计算机网络01-网站数据传输过程

局域网&#xff1a; 覆盖范围小&#xff0c;自己花钱买设备&#xff0c;宽带固定&#xff0c;自己维护&#xff0c;&#xff0c;一般长度不超过100米&#xff0c;&#xff0c;&#xff0c;带宽也比较固定&#xff0c;&#xff0c;&#xff0c;10M&#xff0c;&#xff0c;&…

Mysql常用函数解析

字符串函数 CONCAT(str1, str2, …) 将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello World​​SUBSTRING(str, start, length) 截取字符串的子串&#xff08;起始位置从1开始&#xff09;。 SELECT SUBSTRING(MySQL, 3, 2); -- 输出: SQ…

SpringMVC 前后端数据交互 中文乱码

ajax 前台传入数据&#xff0c;但是后台接收到的数据中文乱码 首先我们分析一下原因&#xff1a;我们调用接口的时候传入的中文&#xff0c;是没有乱码的 此时我们看一下Java后台接口对应的编码&#xff1a; 默认情况&#xff1a;Servlet容器&#xff08;如Tomcat&#xff09;默…

loads、dumps、jsonpath使用场景

在处理JSON数据时&#xff0c;loads、dumps 和 jsonpath 是三个非常有用的工具或概念。它们各自在不同的场景下发挥作用&#xff0c;让我们一一来看&#xff1a; 1. loads loads 函数是 Python 中 json 模块的一部分&#xff0c;用于将 JSON 格式的字符串解析成 Python 的数据…

Java学习手册:Spring 事务管理

一、事务管理的概念 事务是一组操作的集合&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。事务管理的目的是保证数据的一致性和完整性。在数据库操作中&#xff0c;事务管理尤为重要&#xff0c;例如银行转账、订单支付等场景都需要事务管理来确保数据的正确性。…

echarts自定义图表--柱状图-横向

区别于纵向表格 xAxis和yAxis对调 要将label全部固定到最右侧&#xff1a; 隐藏一个柱形 为每个label设置固定的偏移距离 offset: [300 - 80, 0] 在data中加入label的配置 根据现在的值生成距离右侧的偏移 更新方法 chart.setOption({series: [{},{data: data.map(v > ({v…

【CV数据集】Visdrone2019无人机目标检测数据集(YOLO、VOC、COCO格式)

visdrone2019的Task1是非常通用的目标检测数据集&#xff0c;也是许多人做目标检测论文和项目必然会用到的数据集&#xff0c;我将该数据集进行了处理&#xff0c;将其YOLO、VOC和COCO格式都整理好&#xff0c;通过下载我整理好的数据集和相关文件&#xff0c;可以直接在自己的…