如何用Python批量计算Word中的算式

一、问题的提出

到了期末,大家都在忙着写总结、改试卷、算工作量,写总结可以借助于ChatGPT,改试卷可以用星火的自动批阅功能,算工作量就是一项比较棘手的问题,因为它涉及很多算式,有时需要老师用计算器算来算去,因为里面有括号的问题,所以手工算起来非常麻烦。历经十多年的算工作量,我摸索出了一套方法今天与大家分享一下,也算是为大家减轻一下负担,提升工作效率,把工作量算的又快又准。

工作量样例

以上是一张工作量的样图,我们的目标是,把教学工作计算式一列算出来,并填写在标准学时一栏里面。

二、问题的解决

1.搜索引擎法

这种方法很简单,就是把教学工作算式那里的内容复制一下,放到bing搜索框里面,然后回车就可以自动计算出算式的数值,如下图所示。不过,你还需要把这个数值进行四舍五入填写到标准学时那里。这样,有几项任务就要搜索几次,虽然次数比较多,但是上手比较容易,而且不用修改任何算式的内容。

搜索引擎计算

Bing搜索对算式中的符号没有过于严格的要求,如果你想使用百度来计算就要把里面的乘号改为【*】号,中括号改为小括号【()】,这样就可以搜出算式的答案了。如下图所示:

用百度来计算算式

需要注意的是,算式中的符号需要在英文的半角状态下进行,否则就可能报错。

2.Excel表法

多年了,我们已经习惯用Word来计算工作量,原因很简单,就是Word制作表格似乎更方便,也容易调整格式,说白了没有什么技术含量,但是在Word中应用公式,打序号相对比较麻烦,如果模式是Excel表的话,那计算就相对简单一点儿了,为此,我特地把Word表格转化成了Excel表格。为了保证Word表格的格式不改变,我们可以用以下方法,先把Word文件存为htm格式的网页文件,再用Excel打开这个文件,格式就不会变了。可以参考以下方法源自网络[1]。

使用另存为功能:
1. 在Word中打开文档,点击“文件”菜单,选择“另存为”。
2. 在弹出的“另存为”窗口中,选择保存类型为“网页(*.htm; *.html)”,然后点击“保存”。
3. 打开Excel,点击“文件”菜单,选择“打开”。
4. 在“打开”窗口中,找到保存的HTML文件并打开。此时,文档的排版将完整地被导入到Excel中。

Word表格转化为Excel表

采用这种方法,可以充分发挥Excel的计算功能,在标准学时下面的单元格中应用函数:

=round(evaluate(J5),2)

就可以直接把算式计算出来,并且保留小数点后面二位数字,然后向下拖动鼠标,计算所有算式,最后用【Alt+=】求和。但是缺点也很明显,就是要进行格式转化,另外算式中的乘号也要换成星号,方括号也要变成小括号,如果Excel操作不熟练的话,建议还是使用第一种方法来解决。

3.Python代码实现

第一种方法一次只能算一个算式,第二种方法可以算好一个算式后,向下拖动实现全部算式的计算,那用Python可以一次性算完所有的算式,并且自动求和【功能后续添加】。即使算式中有乘号、中括号也可以通过编程的方法进行批量替换。以下代码由我个人与ChatGPT共同完成,实现过程包括,读取docx文件,获取指定列内容,筛选出包含数字的算式,格式化算式后对算式进行计算,并保留小数点2位。

from docx import Documentdef has_digits(s):return any(char.isdigit() for char in s)def replace_operators(expression):# 定义映射符号intab = "×[]"outtab = "*()"# 生成映射表transtab = str.maketrans(intab, outtab)# 批量的字符替换,对算式进行格式化expression = expression.translate(transtab)return expressiondef process_table(table):# 循环每一行for row in table.rows:# 获取J列的值(假设J列对应的是索引11)j_cell = row.cells[11].text# 替换不规则的乘号和中括号j_cell = replace_operators(j_cell)# 只取有数字的单元格的内容if has_digits(j_cell):try:# 计算结果并保留2位小数result = round(eval(j_cell), 2)# 将结果写入K列(假设K列对应的是索引12)row.cells[12].text = str(result)except Exception as e:print(f"Error processing expression in row {e}")def process_word_document(file_path):document = Document(file_path)for table in document.tables:process_table(table)# 保存文档document.save(file_path)# 用法示例
word_file_path = '如何用word统计工作量.docx'
process_word_document(word_file_path)

Python代码的优点是运算快,可以同时处理多个文件,不用担心算式不统一,小数点没有保留2位等问题。

三、学后反思

  1. 上面是生活中应用搜索引擎、Excel和Python的一个小案例,可以看出,对于算式的计算方法多样,大家可以选择适合自己的方法,如果算式不多,搜索引擎法简单实用,如果想一劳永逸就转换为Excel表来计算工作量,简单实用。如果是想批量处理文件就用Python,几十个人的工作量估计10秒左右就算完了。
  2. 上面的代码经测试可用,但是还有一项汇总的内容,后续我还要加上去,这样计算算式、保留2位小数、汇总数据,一气呵成,鼠标一点就完成了批量任务。

参考

  1. ^如何把Word表格转化为Excel不变格式 百度安全验证icon-default.png?t=N7T8https://baijiahao.baidu.com/s?id=1779913471459003540&wfr=spider&for=pc

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

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

相关文章

Linux操作系统极速入门[常用指令](安装jdk,MySQL,nginx),以及在linux对项目进行部署。

linux概述: Linux是一套免费使用和自由传播的操作系统 我们为什么要学,Linux? 主流操作系统: linux系统版本: 内核版: 由linux核心团队开发,维护 免费,开源 负责控制硬件 发行版&…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中,如果自变量之间存在多重共线性,会导致什么问题?如何检测和处理多重共线性?Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)?它们与普通线性回…

从0开始学前端day1

script setup 在script里写一个setup的作用 自动注册子组件属性和方法无需返回,执行完后自动更新支持props和context Vue 3中的props和context props是一种用于父子组件通信的机制。父组件可以通过props向子组件传递数据,子组件则可以通过props接收来…

Cucumber-JVM的示例和运行解析

Cucumber-JVM 是一个支持 Behavior-Driven Development (BDD) 的 Java 框架。在 BDD 中,可以编写可读的描述来表达软件功能的行为,而这些描述也可以作为自动化测试。 Cucumber-JVM 的最小化环境 Cucumber-JVM是BDD的框架, 提供了GWT语法的相…

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍 云原生机器学习平台cube-studio介绍:https://juejin.cn/column/7084516480871563272 cube-studio是开源的云原生机器学习平台,目前包含特征平台,支持在/离线特征;数据源管理,支持结构数据和媒体标…

判断电话号码是否重复-excel

有时候重复的数据不需要或者很烦人,就需要采取措施,希望以下的方法能帮到你。 1.判断是否重复 方法一: 1)针对第一个单元格输入等号,以及公式countif(查找记录数的范围,需要查找的单元格) 2…

Python Web --Django Web框架

场景 近日写了不少Python脚本,例如:爬虫、ocr、模型训练等。我认为可以更加了解python,因为近一个月使用Python给我的感觉比较好,代码比较简单,比java简单很多,而且python自己管理内存,更多依赖…

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点: ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡,10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX,可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

四川天蝶电子商务有限公司助力商家赢在起跑线

随着电商行业的迅猛发展,越来越多的人选择在抖店上开设自己的店铺。作为一家专业的电子商务公司,四川天蝶电子商务有限公司为商家提供了一站式的抖店开店服务,帮助商家轻松开启电商之旅。 首先,四川天蝶电子商务有限公司拥有丰富的…

leetcode贪心算法题总结(一)

此系列分三章来记录leetcode的有关贪心算法题解,题目我都会给出具体实现代码,如果看不懂的可以后台私信我。 本章目录 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列5.最长递增子序列6.递增的三元子序列7.最长连续递增序列8.买卖股票的最…

事务管理解析:掌握Spring事务的必备技能!

AOP事务管理 1.1 Spring事务简介1.1.1 相关概念介绍1.1.2 转账案例-需求分析1.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:创建JdbcConfig配置…

八股文打卡day12——计算机网络(12)

面试题:HTTPS的工作原理?HTTPS是怎么建立连接的? 我的回答: 1.客户端向服务器发起请求,请求建立连接。 2.服务器收到请求之后,向客户端发送其SSL证书,这个证书包含服务器的公钥和一些其他信息…

机器学习之人工神经网络(Artificial Neural Networks,ANN)

人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…

【操作系统】探究驱动奥秘:驱动程序设计的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:Linux专栏:《探秘Linux | 操作系统解密》⏰诗赋清音:月悬苍穹泛清辉,梦随星河徜徉辉。情牵天际云千层,志立乘风意自飞。 目录 &…

数据库——LAMP的搭建及MySQL基操

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机,在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作: (1)登录 MySQL,在 MySQL 中创建用户,并对…

【正则表达式】

概述 正则表达式又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式并不仅限于某一种语…

spss统计软件:BM SPSS Statistics 27 (Win/mac)激活版

IBM SPSS Statistics 27 是一款专为数据分析、统计建模、预测分析和决策支持而设计的软件工具。作为SPSS Statistics系列的一部分,这个版本进一步增强了数据分析的功能,改善了用户体验,并确保了软件的稳定性与兼容性。 主要特点包括&#xff…

Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动

为什么要使用MQ? 在Spring Boot Event这篇文章中已经通过Guava或者SpringBoot自身的Listener实现了事件驱动,已经做到了对业务的解耦。为什么还要用到MQ来进行业务解耦呢? 首先无论是通过Guava还是Spring Boot自身提供的监听注解来实现的事…

Flink on K8S生产集群使用StreamPark管理

(一)直接部署(手动测试用,不推荐) Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式,两者对比 Application 模式部署规避了 Session 模式的资源隔离问题、以及客户端资源消耗问题&am…