基于CSV与python-docx的电子工艺实习报告自动化
2026/9/17 18:33:17 网站建设 项目流程

简介:这份《北京邮电大学电子工艺实习报告》面向通信工程、电子信息工程等专业的本科生与实习指导教师,用于完整复盘电子工艺实习全流程。报告以机器狗项目为主线,涵盖电烙铁与万用表使用、半导体二极管与电解电容等有极性元件的极性判断、色环电阻读数、电路原理图与印制板图识读,并延伸至表面贴装工艺SMT的流程与EDA工具应用。手工焊接部分细述焊料焊剂作用、五步焊接法、元件插放顺序及虚焊、桥接、拉尖等常见缺陷的成因与规避经验;同时记录Multisim电路设计与仿真、整机调试验收与成绩评定方式,知识点成体系,可直接作为撰写实习报告与复盘实操的参考。资源包含1个docx文档,压缩包约136KB,含完整正文与附页内容,已有726人学习下载。

1. 电子工艺实习报告.docx 的交付难点

实习最后一天,焊台已经断电,桌上只剩一把色环电阻、几段剪短的焊锡丝,和一张记着八个电压值的便签。这些散落的数字,最后都要落进一个叫电子工艺实习报告.docx的文件里,而且要求排版规范、图表编号连续、数据能反推回工艺过程。

真正的难点从来不是焊接手法,而是两段转换:先把工艺过程变成可追溯的记录,再把记录变成结构化的文档。焊点是否光亮、回流曲线是否落在窗口内、三极管引脚有没有认错,在工位上靠手感,在报告里必须靠判据和表格说话。

这份内容适合两类人:正在做电子工艺实习、需要一份经得起评阅的报告;以及要给产线或培训做工艺记录模板的工程师。核心思路是用 CSV 存数据、用 python-docx 生成 docx、用域做编号,最后命令行导出 PDF。

2. 从焊台到表格:电子工艺实习报告的数据怎么攒

2.1 先把焊接工艺参数固定成可记录项

工艺参数不固定,后面的分析全是空话。手工焊接和回流焊的记录维度不一样,前者关心单点热输入,后者关心整条温度曲线。下面这张表是常见做法,实际取值按你手上的焊锡牌号和设备微调。

工艺环节关键参数常见取值记录要求
手工焊接(有铅 Sn63Pb37)烙铁头温度 / 单点时间 / 焊丝直径320~350 ℃ / 1~3 s / 0.6~0.8 mm每批测温一次,异常点单独标注
手工焊接(无铅 SAC305)同上350~380 ℃ / 2~4 s温度比有铅高 30 ℃ 左右,时间略长
回流焊峰值区峰值温度 / 液相线以上时间235~245 ℃ / 45~90 s保存曲线截图并记峰值读数
预热与恒温区升温速率 / 恒温时间1~3 ℃/s / 60~90 s记录助焊剂活化是否充分
冷却区冷却速率≤ 4 ℃/s冷得太快容易产生应力与立碑

表里最容易被忽略的是冷却速率。很多报告只写峰值温度,结果样品出现立碑或焊点发脆,找不到解释。冷却速率是回流曲线里唯一「事后无法补救」的段,记录它等于给缺陷留了证据链。

2.2 测点记录用 CSV,不要在 Word 里手敲

Word 表格里手打数据,改一个值就要重新核对全表,而且没法做允差判断。常见做法是先用 CSV 存原始值,判定结果由脚本算。

序号,测点,标称值,实测值,单位,允差,仪器,时间戳 1,VCC 对地电压,5.00,4.96,V,0.10,UT61E,2024-11-05T09:12 2,R12 阻值,1000,988,Ω,50,UT61E,2024-11-05T09:18 3,D3 正向压降,0.70,0.68,V,0.05,UT61E,2024-11-05T09:24 4,三极管基极电流,0.20,0.19,mA,0.02,UT61E,2024-11-05T09:31

接下来说判定。允差写成绝对值列,脚本逐行比较,输出「合格 / 超差」,超差行在报告里必须有一条原因说明,不能默默改数。

# check_points.py —— 对测点表做允差判定,并生成可贴进报告的结论行 import csv SRC = "measure_points.csv" DST = "measure_points_checked.csv" with open(SRC, encoding="utf-8-sig") as f_in, \ open(DST, "w", encoding="utf-8-sig", newline="") as f_out: reader = csv.DictReader(f_in) writer = csv.DictWriter(f_out, fieldnames=reader.fieldnames + ["偏差", "判定"]) writer.writeheader() for row in reader: # 三类数值列都转成 float,避免字符串比较导致 "9.6" > "10.0" 这类误判 measured = float(row["实测值"]) nominal = float(row["标称值"]) tol = float(row["允差"]) deviation = round(measured - nominal, 3) writer.writerow({ **row, "偏差": deviation, "判定": "合格" if abs(deviation) <= tol else "超差", })

这段脚本的关键在encoding="utf-8-sig"。Excel 另存的 CSV 带 BOM,用普通 utf-8 读,第一个列名会变成\ufeff序号DictReader取到的键就对不上。参数上允差用的是绝对偏差而非百分比,如果测点量程跨度大(比如同时有 5 V 和 0.2 mA),建议再加一列允差类型,把百分比换算成绝对值后再写回,保持判定口径统一。

2.3 元器件检测与故障注入怎么留痕

报告里的「故障分析」章节,九成写成了流水账。可行的做法是主动设计故障点,再记录测试手段和判据,让它变成一次可复现的验证。

器件/环节万用表档位正常判据典型异常现象
色环电阻电阻档与色环读数偏差 ≤ 5%读数跳动,多为引脚氧化
二极管二极管档硅管正向 0.5~0.7 V,反向不通双向导通说明已击穿
发光二极管二极管档正向 1.8~2.2 V 并微弱发光不亮且压降正常,查限流电阻
焊点连通性通断档蜂鸣,阻值 < 30 Ω蜂鸣断续,多为虚焊
电容极性电阻档容值随充电缓慢上升容值不动,可能开路

通断档的 30 Ω 阈值是常见做法,但探针接触电阻本身就有几欧,所以贴着蜂鸣临界值的点,最好再用电阻档复核一次,别直接判合格。

3. 用 python-docx 把测点数据写成规范初稿

3.1 先定样式表,再写内容

直接往空白文档里写,最后一定在调格式上耗掉整晚。正确顺序是先做一份带样式的模板report_template.docx,把标题、正文、题注、表格文字的样式全部定义好,脚本只负责套样式。

样式名基于中文字体字号段前/段后用途
Heading 1黑体16 pt12/12 pt一级章节
Heading 2Heading 1黑体14 pt6/6 pt二级小节
Normal宋体12 pt0/0正文,首行缩进 2 字符
CaptionNormal楷体10.5 pt6/6 pt图表题注,居中
TableTextNormal宋体10.5 pt0/0表格内容,无缩进

「基于」这一列是重点。Heading 2 基于 Heading 1,改一次 Heading 1 的字号,下面所有层级跟着变;TableText 基于 Normal 但不继承首行缩进,否则表格里每一格都顶两格空白,看着像排版事故。

3.2 图号表号用 SEQ 域,别手写编号

手写的「图 3-2」在插入一张图之后全部作废。Word 的SEQ域能自动递增,python-docx 没有直接 API,需要拼一小段 XML。

from docx.oxml import OxmlElement from docx.oxml.ns import qn def add_caption(paragraph, prefix="图"): """在题注段落里插入 SEQ 域,Word 打开后按 F9 自动编号""" run = paragraph.add_run(f"{prefix} ") fld = OxmlElement("w:fldSimple") fld.set(qn("w:instr"), r" SEQ 图 \* ARABIC ") paragraph._p.append(fld)

w:instr里的\* ARABIC控制输出阿拉伯数字,如果学院要求「图一」这种格式,换成\* CHINESEBU1。域刚插入时是空的,Word 里全选按 F9 才会显示编号,所以生成完必须走一次刷新,否则打开是一串空白。

3.3 生成脚本:从 CSV 到成稿表格

# build_report.py —— 把判定后的测点表写进报告初稿 import csv from docx import Document from docx.shared import Pt from docx.oxml.ns import qn TEMPLATE = "report_template.docx" SRC = "measure_points_checked.csv" OUT = "电子工艺实习报告_初稿.docx" HEADER = ["序号", "测点", "标称值", "实测值", "偏差", "判定"] def set_cjk(run, name="宋体", size=10.5, bold=False): run.font.name = name run.font.size = Pt(size) run.bold = bold # 中文字体必须单独写 eastAsia,只设 font.name 在 Word 里会回落到默认字体 run._element.rPr.rFonts.set(qn("w:eastAsia"), name) doc = Document(TEMPLATE) doc.add_heading("2 焊接与检测数据", level=1) doc.add_heading("2.2 测点记录", level=2) rows = list(csv.DictReader(open(SRC, encoding="utf-8-sig"))) table = doc.add_table(rows=1, cols=len(HEADER)) table.style = "Table Grid" for cell, text in zip(table.rows[0].cells, HEADER): cell.text = text for para in cell.paragraphs: para.style = doc.styles["TableText"] for r in para.runs: set_cjk(r, "黑体", 10.5, True) for idx, row in enumerate(rows, 1): cells = table.add_row().cells values = [idx, row["测点"], row["标称值"], row["实测值"], row["偏差"], row["判定"]] for cell, value in zip(cells, values): cell.text = str(value) for para in cell.paragraphs: para.style = doc.styles["TableText"] for r in para.runs: set_cjk(r, "宋体", 10.5) # 超差行单独标注,报告中必须给出原因 bad = [r for r in rows if r["判定"] == "超差"] if bad: doc.add_heading("2.3 超差项说明", level=2) for r in bad: doc.add_paragraph(f'{r["测点"]} 偏差 {r["偏差"]} {r["单位"]},超出允差 {r["允差"]},原因为……') doc.save(OUT)

levels顺序不能乱:add_heading(..., level=2)前必须先有 level 1,否则 Word 大纲里会出现没有父级的孤儿节点,自动生成目录时层级错位。table.style = "Table Grid"是模板里存在的样式名,如果你用的是自定义表格样式,名字必须与模板完全一致,写错会抛KeyError

3.4 生成后做三项自检

生成完别直接交,跑一遍检查:一级标题数量是否与章节规划一致、表格行数是否等于 CSV 行数加表头、正文总字数是否达到要求。

# 从 docx 里抽纯文本,做字数与标题层级自查 python -c " from docx import Document d = Document('电子工艺实习报告_初稿.docx') h1 = [p.text for p in d.paragraphs if p.style.name == 'Heading 1'] print('一级标题:', h1) print('正文字数:', sum(len(p.text) for p in d.paragraphs)) print('表格数:', len(d.tables), '首表行数:', len(d.tables[0].rows)) "

输出的表格行数应当是「数据行数 + 1」。少一行通常是 CSV 末尾有空行让DictReader少读了一条,多一行则说明表头被算了两次。

4. 工艺分析章节怎么写才算有技术含量

4.1 把「焊点不亮」翻译成可判定项

评阅人不会追问你焊得亮不亮,但会问你凭什么判定这个点是虚焊。下面这张判据表是报告里最该出现的东西,它把主观描述换成了检查动作。

缺陷外观特征常见成因判定动作
虚焊焊料成球,未润湿焊盘温度不足、焊盘氧化通断档测阻值,> 30 Ω 或蜂鸣断续
桥连相邻引脚被焊料连通焊锡过多、拖焊角度不对通断档测相邻引脚,蜂鸣即桥连
立碑贴片元件一端翘起两端受热不均、冷却过快目视加放大镜,倾斜即判不合格
少锡焊点凹陷,引脚轮廓外露送锡不足、助焊剂挥发目视检查引脚是否完全包覆
冷焊表面粗糙呈豆腐渣状焊接时元件被移动轻拨引脚,晃动即判不合格

注意「轻拨引脚」这一步,力度要控制在用手指轻推的程度。反复大力拨动会把本来合格的焊点掰松,反而制造出缺陷,这类操作在报告里最好注明手法。

4.2 检测数据的出图规范

报告里的图不是给屏幕看的,是打印出来给评阅人看的。中文字体缺失会变成一个个方框,分辨率不够会糊成一团。

# plot_check.py —— 生成报告用的允差对比图 import matplotlib matplotlib.use("Agg") # 无界面环境必须指定后端,否则在服务器上会报错 import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei"] # 中文字体回退列表 plt.rcParams["axes.unicode_minus"] = False # 负号正常显示 plt.rcParams["font.size"] = 10.5 points = ["VCC", "R12", "D3", "Ib"] dev = [0.04, -0.012, -0.02, -0.01] tol = [0.10, 0.05, 0.05, 0.02] fig, ax = plt.subplots(figsize=(5.5, 3.2), dpi=300) # dpi=300 满足打印精度 ax.bar(points, dev, color="#4a6fa5", width=0.5, label="实测偏差") ax.plot(points, tol, "r--", linewidth=1.2, label="允差上限") ax.axhline(0, color="#333", linewidth=0.8) ax.set_ylabel("偏差 / 单位") ax.legend(loc="upper right", frameon=False) fig.tight_layout() fig.savefig("tolerance.png", bbox_inches="tight") # 裁掉多余白边,避免插入后留大片空白

figsize按正文栏宽算,A4 页面单栏约 16 cm,5.5 英寸换算过来差不多,插进去不会被 Word 自动缩放。frameon=False去掉图例边框,打印时更干净。

4.3 允差和结论之间的那条线

常见误用是把「在允差内」直接写成「性能良好」。允差只说明这一批样品落在设计预期内,不代表工艺窗口宽。真正有信息量的写法是给出余量:偏差绝对值占允差的比例,超过 70% 就要在报告里点出来,说明该测点对工艺波动敏感。

另一个坑是采样点太少。四个测点画不出趋势,硬画出来的折线只是把点连起来。测点不足时老老实实用柱状图或表格,比强上折线图可信。

5. 定稿:域更新、导出 PDF 与版本对照

5.1 目录和题注域要一次性刷新

域插入后是空白的,必须在 Word 里全选(Ctrl+A)再按 F9,选择「更新整个目录」。有交叉引用的文档要按两次 F9,第一次刷目录,第二次刷正文里的图表引用。如果打开文档时 Word 提示是否更新域,选「是」,别选「否」,否则目录页码会停留在上一次的状态。

5.2 命令行导出 PDF 并核对

交付格式如果要求 docx 和 PDF 双份,用 LibreOffice 批量转换比手工另存更稳,也方便写进脚本。

# 无界面导出 PDF,输出目录必须已存在 soffice --headless --convert-to pdf --outdir ./dist "电子工艺实习报告_初稿.docx" # 核对页数与文本是否完整,pdftotext 属于 poppler-utils pdfinfo ./dist/电子工艺实习报告_初稿.pdf | grep -E "Pages|Page size" pdftotext ./dist/电子工艺实习报告_初稿.pdf - | wc -m

--outdir指定的目录不存在时,转换会静默失败,只留下一个空目录。pdftotext出来的字符数应当与 docx 正文量级接近,如果少了一大截,多半是字体嵌入失败导致部分文本丢失,回 Word 里换字体再导一次。

检查项期望结果不通过时先看哪里
目录页码与正文实际页码一致是否漏按 F9
图表编号连续无跳号SEQ 域是否被复制成静态文本
中文字体PDF 中无方框系统是否装了报告用的字体
表格行数CSV 行数 + 1编码 BOM 是否被识别
超差项每项都有原因说明2.3 节是否生成

5.3 用 difflib 对照两版报告

改完一版,最怕的是改了这里崩了那里。用脚本抽出两版正文做行级对照,比肉眼翻快得多。

# diff_docx.py —— 对比两版 docx 的正文差异 import difflib from docx import Document def dump(path): d = Document(path) return [p.text for p in d.paragraphs if p.text.strip()] old, new = dump("电子工艺实习报告_v1.docx"), dump("电子工艺实习报告_v2.docx") for line in difflib.unified_diff(old, new, lineterm="", n=0): print(line)

n=0表示只输出变更行、不带上文,输出短但要看清楚是哪一节,建议改成n=2保留两行上下文。这个方法只比文本,表格内容需要额外遍历d.tables取单元格,图片和格式变化不会体现,所以它是核对手段,不是最终校对。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询