资讯动态

python-docx批量生成电子工艺实习报告:三线表、题注与合并

发布时间:2026/9/17 21:54:44 来源:尧图企业网站定制
简介这是一份面向北京邮电大学信息与通信工程学院学生的电子工艺实习完整报告围绕手工焊接、表面贴装工艺与机器狗项目展开适合通信工程、电子信息工程专业学生参考实习流程、整理总结报告或复盘工艺要点。资源为1个docx文档136KB内容按手工焊接实习、电路设计及仿真实习等模块编排含常用电子元器件分类与识别、色环电阻读数、二极管与电解电容极性判断、五步焊接法及虚焊桥接等缺陷分析、SMT工艺流程与发展趋势以及Multisim电路仿真操作与排错经验。报告完整保留实习任务、安全注意事项、成绩评定标准与不少于2000字的实习总结附页可直接对照北邮实习大纲梳理知识点、查漏补缺也能为撰写同类型实习报告提供结构与表述参考。目前已有726人学习下载。1. 电子工艺实习报告.docx 的痛点不在写而在“对不上”电子工艺实习报告.docx 这类文档真正折磨人的从来不是文字量。一个典型的实训周结束桌面上会堆着三十份结构相同、内容各异的报告封面日期格式三种元件清单用的是四种表格线示波器截图编号从“图1”排到“图1(2)”焊接温度有人写 320℃ 有人写 350℃正文却说“采用低温焊接”。带实训的老师改一份要十分钟改三十份就是五个小时其中四小时花在格式和数据一致性上。把这件事拆开看它其实是两个问题叠在一起一层是电子工艺本身的内容规范——焊接参数、元件识别、装配流程、调试数据、故障分析该怎么写才算完整另一层是文档工程——同样的骨架怎么用代码稳定地生成、批量地合并、统一地校验。前者决定报告值不值分后者决定交报告的人要不要熬夜。适合读这篇的人有三类需要批量产出实习报告的实训教师和助教要交报告但不想在排版上翻车的学生以及手上有一堆结构化数据、想把它们变成规范 docx 的工程师。后面几章会沿着“内容骨架 → 样式与表格 → 数据进图 → 批量交付”这条线走所有代码都能直接跑。2. 拆开电子工艺实习报告.docx工艺环节、必填参数与章节骨架2.1 电子工艺实习报告里必须落笔的五个工艺环节一份能被判为“完整”的电子工艺实习报告通常绕不开五个环节缺一个就会显得像走流程。第一是元器件识别与检测色环电阻读数、电容极性判断、二极管方向确认这一节的核心是给出实测值而不是抄标称值第二是印制板装配与手工焊接要写清烙铁温度、接触时间、焊锡丝规格、焊点判定标准第三是整机装配与走线包括跳线、插座、外壳的装配顺序第四是通电调试与参数测量工作电压、静态电流、关键点波形第五是故障排查记录至少写一到两个真实出现过的缺陷比如虚焊、桥接、极性反接以及定位手段。常见做法是把这五节写成固定的二级标题顺序不轻易调整。因为批改时是横向对比的三十份报告如果章节顺序各不相同助教的心理成本会陡增。反过来如果所有人章节一致、只有数据不同批改速度能快一倍以上这也是后面要做模板化的直接理由。2.2 章节骨架、字数配比与图表清单把上面五个环节落成章节需要同时确定字数配比和图表配额。下面这张表是常见的分配方式按 3000 字左右的报告体量给出可以根据实训周数缩放。章节建议字数必备数据必备图表一、实习目的与器材200~300仪器型号、工具清单器材清单表三线表二、元器件识别与检测500~700标称值、实测值、偏差检测记录表 元件照片三、焊接与装配工艺700~900烙铁温度、接触时间、焊点数量焊点判定对照图四、调试与参数测量600~800工作电压、电流、波形幅值波形截图 数据折线图五、故障分析与心得400~600故障现象、定位过程、结论故障点标注图这张表里最容易被忽略的是“必备数据”列。很多报告写“用万用表测量电阻结果正常”这句话在评分表上拿不到分因为它没有可核对的数值。凡是能测的都要给数值凡是给数值的都要带上仪器型号和量程这是电子类实训报告的基本纪律。2.3 把工艺参数抽成一份可校验的数据字典手写报告时参数散落在正文各处改一个温度要翻三页。用代码生成时第一步是把参数抽出来集中管理正文只引用键名。这样温度改一次全文同步也不会出现“正文写 350℃、表格写 320℃”这种自相矛盾。# 电子工艺实习报告.docx 的“数据层”所有工艺参数集中在此正文只引用键名 PROCESS { solder: { iron_temp_c: 350, # 手工焊接烙铁头温度有铅焊锡常用区间 320~370℃ contact_s: 1.5, # 单点接触时间超过 3s 容易烫伤焊盘和塑料件 wire_dia_mm: 0.8, # 焊锡丝直径0.6~1.0mm 适合通孔元件 joint_count: 86, # 本次实训实际焊接点数用于统计良率 }, inspection: { resistor_tol: 0.05, # 色环电阻实测偏差上限超过 5% 视为不合格 diode_vf_v: 0.6, # 硅二极管正向压降参考值锗管约 0.2~0.3V cap_leak_ua: 5, # 电解电容漏电流粗判上限 }, test: { vcc_v: 5.0, # 整机供电电压 i_static_ma: 42, # 静态工作电流 ripple_mv_max: 50, # 电源纹波峰峰值上限 }, }这份字典的用法是正文段落用 f-string 拼装表格由它直接渲染成行。参数说明体现在注释里——烙铁温度不是越高越好350℃ 是通孔元件手工焊的折中值无铅焊锡因为熔点接近 217℃通常要再上调 20~30℃但同时要缩短接触时间到 1 秒左右否则助焊剂挥发过快反而更容易出现拉尖和虚焊。把这些边界写进注释报告里的“工艺分析”一节就有了可引用的依据而不是空谈“要注意温度”。2.4 数据和描述对不上的三种典型写法第一种是单位混用。表格里写“电流 42”正文写“静态电流约 0.04A”读者要在脑子里做一次换算评阅时容易被判为数据不一致。统一在字典里存基准单位渲染时再决定显示单位。第二种是量程缺失。写“测得电压 4.98V”没有意义因为不知道用的是 20V 档还是 2V 档后者精度完全不同。规范写法是“UT61E 直流 20V 档测得 4.98V”。第三种是图注与正文失联。正文说“如图 3 所示”图注却写“图 4 焊接波形”中间插入或删除一张图就全线错位。解决方式不是靠人眼校对而是让题注编号由脚本统一维护这在第 4 章会给出具体实现。3. 用 python-docx 生成电子工艺实习报告.docx样式、题注与三线表3.1 装好 python-docx 并锁定中文字体环境准备很短但字体这一关必须先过否则生成的文件在别人电脑上打开会整体回退成等线或宋体字号行距全乱。# 只需要两个包docx 生成 数据读取绘图另算 pip install python-docx pandasfrom docx import Document from docx.shared import Pt, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.oxml.ns import qn doc Document() # 中文字体必须同时设置 ascii 和 eastAsia只设 font.name 对中文无效 normal doc.styles[Normal] normal.font.name Times New Roman # 西文与数字 normal.font.size Pt(12) # 小四 normal.element.rPr.rFonts.set(qn(w:eastAsia), 宋体) # 中文正文 normal.paragraph_format.line_spacing Pt(22) # 固定行距 22 磅 normal.paragraph_format.space_after Pt(0)这里的关键是w:eastAsia。python-docx 的font.name只写w:ascii和w:hAnsi中文走的是另一套字体属性不显式设置就由渲染端决定。行距用固定值而不是倍数是因为中英文混排时倍数行距在含有上下标的公式行会跳动固定 22 磅能保持整篇一致。3.2 样式先行正文、标题、题注三套样式样式定义一次后面所有段落都靠样式名引用不要逐段设字体。报告类文档至少需要三级标题、正文、题注五套样式其中题注样式是为图表编号服务的。# 一级标题黑体三号居中段前段后各 12 磅 h1 doc.styles[Heading 1] h1.font.name Arial h1.font.size Pt(16) h1.font.bold True h1.element.rPr.rFonts.set(qn(w:eastAsia), 黑体) h1.paragraph_format.alignment WD_ALIGN_PARAGRAPH.CENTER # 图表题注宋体五号居中段后 6 磅 cap doc.styles.add_style(FigCaption, 1) # 1 表示段落样式 cap.font.size Pt(10.5) cap.font.name Times New Roman cap.element.rPr.rFonts.set(qn(w:eastAsia), 宋体) cap.paragraph_format.alignment WD_ALIGN_PARAGRAPH.CENTER cap.paragraph_format.space_after Pt(6)参数说明add_style(name, 1)里的 1 是WD_STYLE_TYPE.PARAGRAPH的枚举值表示段落样式写字符样式会得到 2。题注字号比正文小一档是排版惯例五号对应 10.5 磅。段后 6 磅是为了让题注和下方正文拉开距离避免视觉上黏在一起。3.3 生成三线表的函数与调用方式电子类报告里的数据表基本都是三线表顶线、表头下线、底线中间无线。python-docx 没有内置三线表需要直接操作表格的 XML 边框属性。from docx.oxml import OxmlElement def set_borders(table): 清除全部边框随后只补顶线、表头下线、底线 borders OxmlElement(w:tblBorders) for edge, sz in ((top, 12), (bottom, 12), (left, 0), (right, 0), (insideH, 0), (insideV, 0)): el OxmlElement(fw:{edge}) el.set(qn(w:val), single if sz else none) el.set(qn(w:sz), str(sz)) # 线宽单位是 1/8 磅12 即 1.5 磅 el.set(qn(w:color), 000000) borders.append(el) table._tbl.tblPr.append(borders) def add_header_rule(row): 单独给表头行加下线补上三线表缺的那一条 for cell in row.cells: tcPr cell._tc.get_or_add_tcPr() el OxmlElement(w:tcBorders) bottom OxmlElement(w:bottom) bottom.set(qn(w:val), single) bottom.set(qn(w:sz), 6) # 表头线略细0.75 磅 bottom.set(qn(w:color), 000000) el.append(bottom) tcPr.append(el) def add_table(doc, header, rows, caption): doc.add_paragraph(caption, styleFigCaption) t doc.add_table(rows1, colslen(header)) t.alignment WD_ALIGN_PARAGRAPH.CENTER for i, text in enumerate(header): t.rows[0].cells[i].text text for r in rows: cells t.add_row().cells for i, v in enumerate(r): cells[i].text str(v) set_borders(t) add_header_rule(t.rows[0]) return t add_table( doc, header[元件, 标称值, 实测值, 偏差], rows[(R1, 10kΩ, 9.87kΩ, 1.3%), (R2, 1kΩ, 1.02kΩ, 2.0%), (C1, 100µF, 96.5µF, 3.5%)], caption表 1 元器件检测记录, )逻辑说明set_borders先把六条边框全部置为none再单独打开顶线和底线w:sz的取值是 1/8 磅所以 12 对应 1.5 磅这是三线表顶底线的常用粗细。表头下线不能靠insideH全局打开否则每行之间都会出现横线只能逐单元格加w:bottom。表注放在表格上方因为中文表格的题注惯例在表上、图注在图下这一点和英文论文相反混用会被认为格式错误。3.4 参数说明与常见报错几个高频问题值得单独列一下。表格宽度溢出页面时不是去改页边距而是给单元格设置cell.width并关闭自动调整table.autofit False之后宽度才会生效。样式名写错会抛KeyErrorpython-docx 不会自动创建内置样式用add_style注册过的名字才能引用。中文字体设置后如果仍然显示异常检查是不是在设置字体之前就写入了段落Normal样式只影响之后创建的段落。注意qn()来自docx.oxml.ns前缀写错会导致生成的 XML 命名空间错乱文件能用 Word 打开但边框不生效排查时优先怀疑这一处。4. 焊接记录与测试数据自动进表电子工艺实习报告.docx 的图表流水线4.1 从焊接记录 CSV 到折线图手工整理数据最容易出错的地方是把 Excel 里的数值手抄进 Word。用脚本把中间这一步去掉数据直接从 CSV 进图和表。import pandas as pd import matplotlib.pyplot as plt from matplotlib import rcParams # 中文字体必须显式指定否则图中中文会变成方块 rcParams[font.sans-serif] [SimHei] rcParams[axes.unicode_minus] False # 解决负号显示成方块 df pd.read_csv(solder_log.csv, encodingutf-8) # 期望列point_id, iron_temp_c, contact_s, result # 按温度分组统计良率result 为 1 表示合格焊点 yield_by_temp df.groupby(iron_temp_c)[result].mean() * 100 fig, ax plt.subplots(figsize(6, 3.6), dpi200) ax.plot(yield_by_temp.index, yield_by_temp.values, markero, linewidth1.5) ax.set_xlabel(烙铁温度 / ℃) ax.set_ylabel(焊点合格率 / %) ax.grid(alpha0.3) fig.tight_layout() fig.savefig(fig_yield.png, dpi200) # 存图不调用 show()逻辑说明groupby后取均值得到的是每组合格率乘 100 转成百分比这样折线图的纵轴才有可比性。figsize用 6×3.6 英寸是按 A4 页面正文宽度 15.9cm 折算的插入后基本可以 1:1 显示不用再缩放。dpi200是为了打印时不糊同时文件体积还在可接受范围。中文乱码是 matplotlib 最常见的坑SimHei在 Windows 上一定有Linux 上可以换成Noto Sans CJK SC并清一次字体缓存。4.2 图片题注编号与交叉引用图的编号不能手写否则插入或删除一张图后全文错位。做法是维护一个计数器正文里需要引用的地方统一从同一个字典取号。FIG_NO {yield: 0} # 图号登记表新增图时同步登记 def add_figure(doc, path, key, caption, width_cm14): FIG_NO[key] len([k for k in FIG_NO if FIG_NO[k]]) if False else FIG_NO[key] 1 p doc.add_paragraph() p.alignment WD_ALIGN_PARAGRAPH.CENTER p.add_run().add_picture(path, widthCm(width_cm)) doc.add_paragraph(f图 {FIG_NO[key]} {caption}, styleFigCaption) return FIG_NO[key] # 正文引用时用同一个号保证与题注一致 n add_figure(doc, fig_yield.png, yield, 不同烙铁温度下的焊点合格率) doc.add_paragraph(f由图 {n} 可见温度低于 320℃ 时合格率明显下滑。)参数说明widthCm(14)留出左右各约 1cm 的余量避免图片顶到页边距导致排版器自动缩图。FIG_NO用字典而不是全局整数是为了后续按章节插入不同图组时能分别计数。实际项目中更稳妥的做法是遍历文档已有题注重新编号但在一次成文的场景下计数器方案已经足够且实现成本低得多。4.3 合并多份电子工艺实习报告.docx一个实训班三十人常见的交付方式是每人交一份、最后合订成一本。python-docx 本身不支持文档合并因为直接拼接会破坏样式表和编号关系。常见做法是用 docxcompose它在合并时会把样式重命名并统一映射。pip install docxcomposefrom docx import Document from docxcompose.composer import Composer master Document(cover_and_toc.docx) # 封面 目录模板 composer Composer(master) for name in [stu_01.docx, stu_02.docx, stu_03.docx]: composer.append(Document(name)) # 样式冲突由 Composer 内部处理 composer.save(电子工艺实习报告_合订.docx)逻辑说明Composer会保留主文档的样式定义被追加文档中冲突的样式自动改名因此不会出现“第一份报告的行距污染后面所有报告”的情况。合并后需要重新生成目录因为页码已经变化这一步交给 Word 的域更新或者用脚本触发更新都可以但不要指望合并前算好的页码仍然正确。4.4 图表流水线的校验要点检查项判定方式常见故障图注编号连续提取全部图 N题注检查是否跳号删图后未重编号中文字体生效打开后查看标题是否仍为默认字体只设了 ascii 字体表格无内部横线目视表格第二行以下是否有线误用内置表格样式数值与正文一致比对字典值与表格值手改表格未同步字典图片不变形检查插入宽度与原始宽高比同时指定宽高这张表可以做成一个脚本自动跑前四项都能通过解析 docx 的 XML 完成最后一项读add_picture时记录的比例即可。写完报告再回头逐项肉眼检查成本远高于一开始就把它变成校验脚本。5. 电子工艺实习报告.docx 交付前的自检与批量替换技巧5.1 交付前的四项自检生成完 docx 不等于交付完成交给老师或打印店之前至少跑四件事。第一是转一次 PDF用soffice --headless --convert-to pdf 电子工艺实习报告.docx在命令行完成能转成功且版式无明显变化说明字体和表格结构没有硬伤很多问题就是在转换环节暴露的比如某个字体在目标机器上缺失导致行距跳变。第二是统计段落数和图片数与预期值对一下防止某个循环少写了一节。第三是全文搜索“None”和“nan”pandas 读入空单元格会变成 NaN直接拼进正文就会出现这些字符串。第四是检查所有图注和表注是否都有编号没有编号的题注通常是异常路径产生的。from docx import Document doc Document(电子工艺实习报告.docx) text \n.join(p.text for p in doc.paragraphs) assert nan not in text.lower(), 存在未处理的空数据 assert None not in text, 存在未赋值的字段 assert len(doc.tables) 4, 表格数量少于预期 assert all(p.text.strip() for p in doc.paragraphs if p.style.name FigCaption), \ 存在空题注 print(段落, len(doc.paragraphs), 表格, len(doc.tables), 图片, len(doc.inline_shapes))这段断言脚本的价值在于把“感觉没问题”变成“跑过没问题”。参数上len(doc.tables)的期望值要和第 2 章那张骨架表对齐器材清单、检测记录、测试数据、故障记录四张表是底线。5.2 批量替换与模板复用模板化的最后一公里是替换。把封面姓名、学号、班级、日期留成占位符比如{{NAME}}、{{SID}}、{{DATE}}然后用段落级替换批量填充注意一次替换要遍历所有 run因为 Word 会把同一句话拆成多个 run。def fill(doc, mapping): for p in doc.paragraphs: for run in p.runs: for key, val in mapping.items(): if key in run.text: run.text run.text.replace(key, val) for t in doc.tables: for row in t.rows: for cell in row.cells: for p in cell.paragraphs: for run in p.runs: for key, val in mapping.items(): if key in run.text: run.text run.text.replace(key, val) fill(doc, {{{NAME}}: 张三, {{SID}}: 20230101, {{DATE}}: 2024-11-08}) doc.save(电子工艺实习报告_张三.docx)注意在 run 级别替换而不是段落级别——p.text ...会把该段落所有 run 的格式合并成一个加粗、下标、字体差异会全部丢失封面标题一旦变回普通正文就得手工重排。表格里的单元格也要单独遍历因为它们不在doc.paragraphs里。这套替换逻辑配上第 3 章的样式模板一个班的报告可以在几秒内生成完毕剩下的时间用来核对每个人测出来的真实数据而不是和格式较劲。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价