当前位置: 首页 > news >正文

【Python】Python-docx使用实例 科技档案封面批量生成

使用背景

根据excel表中的信息,按照word模板格式,每条信息生成一个对应的模板及文件名。

我这里的情况是将科技档案的封面格式按照案卷表的明细批量生成。

(单位的档案软件太鸡肋了,没有这个功能)

代码整篇

'''
工程档案封面制作
原理:通过读取案卷目录生成对应word
python-docx说明文件地址
https://python-docx.readthedocs.io/en/latest/index.html
'''
import openpyxl
from docx import Document
from docx.shared import Ptdef WriteNewDoc(a,b,c,d,e,dir):'''写入科技档案封面'''doc= Document('/data/home/2024/99档案/科技档案封面模板.docx')para = doc.paragraphs#填写档号text_run1 = para[0].add_run(a)text_run1.underline = Truetext_run1.font.size = Pt(22)text_run1.font.name = '黑体'#填写立卷单位text_run2 = para[-4].add_run(b.center(14))text_run2.underline = Truetext_run2.font.size = Pt(22)text_run2.font.name = '黑体'#填写起止日期text_run3 = para[-3].add_run(c.center(27))text_run3.underline = Truetext_run3.font.size = Pt(22)text_run3.font.name = '黑体'#填写保管期限text_run4 = para[-2].add_run(d.center(26))text_run4.underline = Truetext_run4.font.size = Pt(22)text_run4.font.name = '黑体'#填写密级if e is None:text_run5 = para[-1].add_run("                            ")else:text_run5 = para[-1].add_run(e.center(28))text_run5.underline = Truetext_run5.font.size = Pt(22)text_run5.font.name = '黑体'title = dir+a+'.docx'doc.save(title)returnwb = openpyxl.load_workbook('/data/home/2024/99档案/2023工程案卷.xlsx')
ws = wb.active
#3和14是我要使用的表格信息的行号区间首尾,一行信息生成一个文件
for row in range(3,14):#读取档号data1 = ws.cell(row,4).value#读取立卷单位data2 = ws.cell(row,2).value#读取起止日期data3 = ws.cell(row,7).value#读取保管期限data4 = ws.cell(row,8).value#读取密级data5 = ws.cell(row, 13).valueWriteNewDoc(data1,data2,data3,data4,data5,'/data/home/2024/99档案/')
wb.close()

要点

  1. python-docx的对象架构,是document里含paragraphs,一个paragraph里含runs,一个run里含font,一个font可以调整字体的那些属性,当然,每一级都有自己的具体属性可以调整,比如段落可以调整居左/居右/居中,run里可以调整加粗、倾斜、下划线之类,font可以调整字体、大小之类。没有用到表格和超链接,没细看这两个对象的说明。
  2. document.save()里有名字的话,与模板不一样就是另存为了。
  3. Pt(22)对应中文二号字体,即22磅。
  4. string.center(num)中num的数值不一致,是因为我没找到中文字符的空格,一个中文字符的宽度等于两个空格,又不知道如何限制文本显示出的总长度,所以笨办法只能数,好在要不全是中文字符,要不全是数字,写好的长度都适用。密级那栏对应信息经常为空,所以加了判断。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CollectionUtils的使用
  • Python实现发票信息识别
  • 编译打包自己的云手机(redroid)镜像
  • Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南
  • 掌握Laravel的策略与授权门面:构建安全的Web应用
  • React Native: 构建原生级移动应用的跨平台框架
  • matine组件库踩坑日记 --- react
  • Django ORM中的Q对象
  • 1.3Zygote
  • 【Redis】哨兵(sentinel)
  • 利用AI辅助制作ppt封面
  • 访问 Postman OAuth 2.0 授权的最佳实践
  • git常用命令及git分支
  • 服务器操作集合
  • 【postgresql】锁
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Flannel解读
  • Github访问慢解决办法
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JS学习笔记——闭包
  • Meteor的表单提交:Form
  • mysql 5.6 原生Online DDL解析
  • Python socket服务器端、客户端传送信息
  • ReactNativeweexDeviceOne对比
  • VuePress 静态网站生成
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 创建一种深思熟虑的文化
  • 分布式任务队列Celery
  • 将 Measurements 和 Units 应用到物理学
  • 类orAPI - 收藏集 - 掘金
  • 前言-如何学习区块链
  • 入口文件开始,分析Vue源码实现
  • 入门到放弃node系列之Hello Word篇
  • 世界上最简单的无等待算法(getAndIncrement)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 一些css基础学习笔记
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​ssh免密码登录设置及问题总结
  • # dbt source dbt source freshness命令详解
  • #Z2294. 打印树的直径
  • (floyd+补集) poj 3275
  • (javaweb)Http协议
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (二)测试工具
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • ****三次握手和四次挥手
  • .mysql secret在哪_MySQL如何使用索引
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @RestControllerAdvice异常统一处理类失效原因
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具