一份用pyhon生成word/wps文档的代码

news/2025/11/12 13:31:11/文章来源:https://www.cnblogs.com/wangya216/p/19213657
import os, pythoncom, win32com.client as win32# ---------------------- 工具函数 ----------------------
def get_or_add_style(doc, name):try:return doc.Styles(name)except:return doc.Styles.Add(Name=name, Type=1)  # 1=段落样式# ---------------------- 主程序 ----------------------
pythoncom.CoInitialize()
try:app = win32.Dispatch("Word.Application")
except:app = win32.Dispatch("Kwps.Application")
app.Visible = True
doc = app.Documents.Add()# Word 常数
wdCollapseEnd = 0
wdStory = 6
wdWord9TableBehavior = 1
wdAutoFitContent = 1
wdFormatDocumentDefault = 12# ---------- 1. 建立样式 ----------
def make_styles():# 实验标题s = get_or_add_style(doc, "濮工_实验标题")s.Font.NameFarEast = s.Font.Name = "黑体"s.Font.Size = 18s.Font.Bold = Truepf = s.ParagraphFormatpf.Alignment = 1          # 居中pf.SpaceBefore = 18pf.SpaceAfter = 12pf.LineSpacingRule = 0    # 单倍# 一级标题s = get_or_add_style(doc, "濮工_一级标题")s.Font.NameFarEast = s.Font.Name = "黑体"s.Font.Size = 14s.Font.Bold = Truepf = s.ParagraphFormatpf.Alignment = 0pf.SpaceBefore = 12pf.SpaceAfter = 6pf.LineSpacingRule = 0# 二级标题s = get_or_add_style(doc, "濮工_二级标题")s.Font.NameFarEast = s.Font.Name = "黑体"s.Font.Size = 12s.Font.Bold = Truepf = s.ParagraphFormatpf.Alignment = 0pf.SpaceBefore = 6pf.SpaceAfter = 3pf.LineSpacingRule = 0# 正文s = get_or_add_style(doc, "濮工_正文")s.Font.NameFarEast = s.Font.Name = "宋体"s.Font.Size = 10.5pf = s.ParagraphFormatpf.FirstLineIndent = app.CentimetersToPoints(0.74)  # 2 字符pf.LineSpacingRule = 3      # 多倍pf.LineSpacing = 1.25       # 1.25 倍pf.Alignment = 0            # 默认居左,避免继承公式的居中# 图题注s = get_or_add_style(doc, "濮工_图题注")s.Font.NameFarEast = s.Font.Name = "宋体"s.Font.Size = 9pf = s.ParagraphFormatpf.Alignment = 1pf.SpaceAfter = 6pf.LineSpacingRule = 0# 表题注s = get_or_add_style(doc, "濮工_表题注")s.Font.NameFarEast = s.Font.Name = "宋体"s.Font.Size = 9pf = s.ParagraphFormatpf.Alignment = 1pf.SpaceBefore = 6pf.LineSpacingRule = 0make_styles()# ---------- 2. 顺序写内容 ----------
rng = doc.Range()
rng.Collapse(wdCollapseEnd)def write(style, text, newline=True):rng.Style = stylerng.Text = textif newline:rng.InsertParagraphAfter()rng.Collapse(wdCollapseEnd)# 标题
write(doc.Styles("濮工_实验标题"), "实验13 单片机流水灯实验")# 一、实验目的
write(doc.Styles("濮工_一级标题"), "一、实验目的")
for t in ["1. 掌握51系列单片机(如STC89C52)的基本工作原理及IO口控制方法;","2. 学会使用Keil C51软件编写简单的单片机控制程序,掌握程序下载流程;","3. 理解流水灯的实现逻辑,能通过硬件连接和软件调试实现LED灯的循环点亮效果;","4. 熟悉面包板、导线、电阻等元件的使用,提升硬件搭建与故障排查能力。"]:write(doc.Styles("濮工_正文"), t)# 二、实验仪器
write(doc.Styles("濮工_一级标题"), "二、实验仪器")
for t in ["1. 核心设备:STC89C52单片机开发板(或最小系统板)、USB下载线、Keil C51软件(V4.7及以上版本);","2. 电子元件:红色LED灯(8个)、1kΩ限流电阻(8个)、面包板(1块)、杜邦线(20根,含公对母、公对公);","3. 辅助工具:万用表(1台,用于检测电路通断)、镊子(1把);","4. 示意图:"]:write(doc.Styles("濮工_正文"), t)
write(doc.Styles("濮工_图题注"), "图13-1 单片机流水灯实验硬件连接示意图")# 三、实验原理
write(doc.Styles("濮工_一级标题"), "三、实验原理")
write(doc.Styles("濮工_二级标题"), "1. 单片机IO口控制原理")
write(doc.Styles("濮工_正文"), "51系列单片机的P1口为8位准双向IO口,可直接作为输出口使用。当IO口输出低电平时(接近0V),外接LED灯通过限流电阻形成回路,LED点亮;当IO口输出高电平时(接近5V),回路中电流极小,LED熄灭。通过控制P1口各引脚的高低电平变化,可实现LED灯的亮灭控制。")
write(doc.Styles("濮工_二级标题"), "2. 流水灯实现逻辑")
write(doc.Styles("濮工_正文"), "采用“循环移位+延时”的方式实现流水灯效果:通过程序让P1口的低电平信号按固定顺序(如从P1.0到P1.7,即左移;或从P1.7到P1.0,即右移)依次切换,每次切换后保持一定时间(由延时函数实现),从而形成“流水”视觉效果。")
write(doc.Styles("濮工_二级标题"), "3. 核心公式(延时时间计算)")
write(doc.Styles("濮工_正文"), "若单片机晶振频率为11.0592MHz(常用频率),机器周期T机 = 12/f晶振,其中f晶振为晶振频率。延时函数的延时时间t可近似表示为:")# 核心修正:公式段处理(居中)
formula_rng = rng.Duplicate  # 复制当前光标位置,专门用于公式
formula_rng.Style = doc.Styles("濮工_正文")
formula_rng.ParagraphFormat.Alignment = 1  # 公式段居中
formula_rng.Text = "t ≈ N × T机   "
formula_rng.InsertParagraphAfter()
# 光标移到公式下方,恢复居左
rng.MoveEnd(Unit=wdStory)
rng.Collapse(wdCollapseEnd)
rng.ParagraphFormat.Alignment = 0  # 确保后续文本居左# 写入“式中N…”,此时已默认居左
write(doc.Styles("濮工_正文"),"式中N为延时函数中指令执行的总周期数,本实验中通过Keil软件自动计算,设定单次延时时长为500ms,确保流水效果清晰可见。")# 四、实验内容及步骤
write(doc.Styles("濮工_一级标题"), "四、实验内容及步骤")
write(doc.Styles("濮工_二级标题"), "1. 实验前准备")
for t in ["(1)硬件准备:检查单片机开发板、LED灯、电阻等元件是否完好;用万用表检测限流电阻阻值是否为1kΩ,排除损坏元件;","(2)软件准备:在电脑上安装Keil C51软件,完成软件注册与环境配置(如选择“Atmel”→“AT89C52”芯片型号);","(3)电路连接:将单片机P1口(P1.0~P1.7)通过杜邦线接面包板,LED正极经1kΩ电阻接5V电源,负极接对应P1口引脚,确保电源正负极无接反。"]:write(doc.Styles("濮工_正文"), t)# 五、数据及处理结果
write(doc.Styles("濮工_一级标题"), "五、数据及处理结果")
write(doc.Styles("濮工_表题注"), "表13-1 单片机流水灯实验数据记录表")
# 插入表格
table_rng = rng.Duplicate
table = doc.Tables.Add(table_rng, 4, 6, AutoFitBehavior=wdAutoFitContent)
table.Borders.Enable = True
# 表头
hdr = ["实验序号", "流水模式", "延时时长(ms)", "LED点亮顺序", "实验现象描述", "是否正常"]
for i, h in enumerate(hdr, 1):table.Cell(1, i).Range.Text = h
# 数据
rows = [["1", "左移", "500", "P1.0→P1.1→…→P1.7", "8个LED从左到右依次循环点亮", ""],["2", "左移(修改延时)", "200", "P1.0→P1.1→…→P1.7", "流水速度加快,点亮间隔缩短", ""],["3", "右移(修改程序)", "500", "P1.7→P1.6→…→P1.0", "8个LED从右到左依次循环点亮", ""]]
for r, row_data in enumerate(rows, 2):for c, txt in enumerate(row_data, 1):table.Cell(r, c).Range.Text = txt
# 居中
for r in range(1, 5):for c in range(1, 7):table.Cell(r, c).Range.ParagraphFormat.Alignment = 1
# 光标移到表格下方
app.Selection.EndKey(Unit=wdStory)
app.Selection.InsertParagraphAfter()
rng = app.Selection.Rangewrite(doc.Styles("濮工_正文"), "数据处理与分析:")
write(doc.Styles("濮工_正文"), "1. 对比实验1和2:延时时长从500ms缩短至200ms,流水周期从4s(8×500ms)缩短至1.6s(8×200ms),验证“延时时长与流水速度成反比”;")
write(doc.Styles("濮工_正文"), "2. 实验3通过修改程序中“led << 1”为“led >> 1”,实现右移流水,说明单片机IO口控制的灵活性。")# 六、思考题
write(doc.Styles("濮工_一级标题"), "六、思考题")
for t in ["1. 单片机IO口输出高电平时LED不亮,输出低电平时LED亮,其电路原理是什么?若将LED的正负极接反,会出现什么现象?","2. 若想实现“LED灯闪烁2次后再流水”的效果,需要在程序中添加哪些逻辑?","3. 实验中1kΩ限流电阻的作用是什么?若去掉限流电阻直接连接LED,可能会导致什么问题?"]:write(doc.Styles("濮工_正文"), t)# ---------- 保存 ----------
save_path = os.path.join(os.path.expanduser("~"), "Desktop", "单片机流水灯实验讲义2.docx")
doc.SaveAs(save_path, FileFormat=wdFormatDocumentDefault)
print("已生成:", save_path)

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

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

相关文章

LangChain PromptTemplate 全解析:从模板化提示到智能链构 - 教程

LangChain PromptTemplate 全解析:从模板化提示到智能链构 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

【Kubernetes】使用Helm简化k8s部署、管理

使用Helm简化Kubernetes部署、管理 Helm 是 Kubernetes 的包管理工具,能够简化应用的部署、管理和升级流程。以下是使用 Helm 的基本步骤和常见操作。 先决条件 想成功和正确地使用Helm,需要以下前置条件。一个 Kube…

CompletableFuture Java8 异步编程工具

Java的CompletableFuture是Java 8引入的一个非常强大的异步编程工具,它实现了Future和CompletionStage接口,提供了丰富的方法来组合、转换和处理异步计算的结果。下面我将从创建、转换、组合、错误处理等方面详细讲解…

2025年评价高的单插插入门最新TOP品牌厂家排行

2025年评价高的单插插入门最新TOP品牌厂家排行行业背景与市场趋势随着家居五金行业的快速发展,单插插入门作为现代家居的重要组成部分,其市场需求呈现稳定增长态势。据中国五金制品协会最新数据显示,2024年全球家居…

【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Kafka客户端基础使用

依赖 引入以下依赖<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</art…

Java EE初阶--多线程 - 教程

Java EE初阶--多线程 - 教程2025-11-12 13:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

【ArcMap】查看、反转线的方向

1、查看 双击左侧图层中的线形,选择箭头即可 2、反转:首先开始编辑,选中需要反转的线,点击编辑折点(Editor Verticea)按钮 然后在选中的线上右键(或者左键双击选中,再右键),选则flip反转 反转成功

systemd-timedated.service Dbus参考

https://www.freedesktop.org/software/systemd/man/latest/org.freedesktop.timedate1.htmlName org.freedesktop.timedate1 — The D-Bus interface of systemd-timedatedIntroduction systemd-timedated.service(8)…

2025年比较好的防火岩棉板厂家实力及用户口碑排行榜

2025年比较好的防火岩棉板厂家实力及用户口碑排行榜行业背景与市场趋势随着我国建筑节能标准的不断提高和消防安全意识的增强,防火岩棉板作为A级不燃材料在建筑外墙保温领域的应用日益广泛。据中国绝热节能材料协会统…

2025年口碑好的链条输送机实力厂家TOP推荐榜

2025年口碑好的链条输送机实力厂家TOP推荐榜行业背景与市场趋势随着全球制造业智能化升级步伐加快,链条输送机作为工业自动化生产线的核心设备,市场需求持续增长。据《2024-2029年中国输送机械行业市场调研与投资前景…

2025年比较好的超强承重天地铰链厂家实力及用户口碑排行榜

2025年超强承重天地铰链厂家实力及用户口碑排行榜行业背景与市场趋势随着现代家居设计向极简风格发展,天地铰链作为高端柜门系统的核心部件,市场需求持续增长。据中国五金制品协会2024年数据显示,国内高端五金配件市…

传统企业能源管理痛点破解:MyEMS 如何解决 “数据散、分析难、优化慢” 三大核心问题?

在 “双碳” 目标与制造业转型升级的双重驱动下,能源管理已成为传统企业降本增效、实现可持续发展的核心抓手。然而,多数传统企业(如化工、机械、冶金等)在能源管理中仍深陷 “数据散、分析难、优化慢” 的困境 —…

Magisk体系:Android Root权限的工程化部署方案

Magisk的技术定位与核心价值 Magisk作为Android平台的开源Root框架,以APK形态实现无系统分区侵入(Systemless)的权限接管机制。其技术突破在于规避对/system分区的直接修改,通过动态挂载技术完成提权,同时构建了可…

2025年评价高的绿篱修剪机最新TOP厂家排名

2025年评价高的绿篱修剪机最新TOP厂家排名行业背景与市场趋势随着城市化进程加快和绿化需求提升,全球园林机械市场持续增长。据《2024-2029年全球园林机械行业市场调研与前景预测报告》显示,2023年全球园林机械市场规…

MX Round 23 解题报告

T1 破环为链,枚举区间。 接下来考虑本质不同的顺序只有:\(ABC\) 和 \(CBA\),第二种可以通过序列逆序后重复操作得到。 接下来我们在枚举区间时,统计每一个元素在最后占区间中的每个字母出现次数。 我们发现交换有两…

2025年质量好的载带成型机用户口碑最好的厂家榜

2025年质量好的载带成型机用户口碑最好的厂家榜行业背景与市场趋势载带成型机作为电子元器件包装领域的关键设备,近年来随着半导体、电子元件行业的快速发展而迎来新的增长机遇。据《2024-2029年中国载带行业市场调研…

【转】Milo库OPCUA协议java实现

原文地址:Milo库OPCUA协议java实现 - 知乎 Milo库 今天跟大家来介绍一下一个OPC UA协议的开源库,我们使用的现场设备为西门子的S7-1500 CPU,西门子的S7-1500在V2.1版本后就直接可以作为OPC UA的服务器来供其他客户端…

2025年热门的超低压反渗透膜最新TOP品牌厂家排行

2025年热门的超低压反渗透膜最新TOP品牌厂家排行行业背景与市场趋势随着全球水资源短缺问题日益严峻,水处理技术尤其是反渗透膜技术正迎来快速发展期。根据Global Water Intelligence最新报告显示,2024年全球反渗透膜…

2025年口碑好的门式起重机最新TOP厂家排名

2025年口碑好的门式起重机最新TOP厂家排名行业背景与市场趋势门式起重机作为现代工业生产和物流运输中不可或缺的重型设备,近年来随着制造业转型升级和基础设施建设的持续推进,市场需求呈现稳定增长态势。根据中国重…