如何使用python docx自定义Word中的编号样式?
我试图使用PythonDocx在Word文件中添加段落时自定义编号样式 例如,不只是添加如何使用python docx自定义Word中的编号样式?,python,ms-word,docx,python-docx,Python,Ms Word,Docx,Python Docx,我试图使用PythonDocx在Word文件中添加段落时自定义编号样式 例如,不只是添加'1'在一段的开头,我想做'class#1' 可能吗?是否有可以直接使用的函数?此示例将参数传递给示例docx: #生成_roombill_docx.py 进口稀土 从pathlib导入路径 从models.com导入RoomBill,c_room_bills_序列化程序 从models.nezha导入获取社区名称 from.create_docx_by_示例导入docx_替换 从.helper导入创建序列号
'1'代码>在一段的开头,我想做'class#1'代码>
可能吗?是否有可以直接使用的函数?此示例将参数传递给示例docx:
#生成_roombill_docx.py
进口稀土
从pathlib导入路径
从models.com导入RoomBill,c_room_bills_序列化程序
从models.nezha导入获取社区名称
from.create_docx_by_示例导入docx_替换
从.helper导入创建序列号,详细价格
异步定义gen_docx(roombill:roombill,主机:str,r2=None,target=None):
# 创建docx文件,返回文件路径目标,指定让r2/c2采取二合一打印
社区名称=等待获取社区名称(roombill.community)
房间名称=房间账单。房间名称
host=host.replace(“www.esoaru.net”、“esoaru.net”)
img=qrcode\u path(主机、社区名称、roombill.room\u slug)
其中=路径(文件)。父
样本=其中/“样本_模板2.docx“
账单,总计=等待c\U房间账单\U序列化程序([roombill])
参数=构建参数(
账单,
房间名称,
社区名称,
全部的
roombill.name,
比尔,注意,
这段时间,
)
img_数据={“img_支付代码”:img}
如果社区名称==“xxx”:
参数[“谁”]=(
"深圳艺坤家园物业管理有限公司"
“\n”
"服务中心电话: 0755-28281233 (8:30-21:00)"
“\n”
"监控中心电话: 0755-28283118 (7*24小时)"
)
其他:
参数[“谁”]=“”
如果r2:
#TODO 2.2:两个单打印在同一张纸
其中=路径(文件)。父
sample=where/“double_sample.docx”
如果目标为无:
媒体=路径(“媒体”)
name=f“{room\u name}{r2}.docx”如果r2不是f“{room\u name}.docx”
目标=媒体/社区名称/“通知单“/姓名
target.parent.exists()或target.parent.mkdir(parents=True)
docx_替换(样本、目标、参数、img_数据)
返回str(目标)
def文件格式(详细信息):
如果没有详细说明:
返回“”
d=re.sub(r“”,详图)
d=re.sub(r“,”和d)
d=re.sub(r“\s{2,}”,“”,d)
返回d
def build_参数(
法案:dict,
单位:str,
社区名称:str,
总数:str,
账单名称:str,
备注:str=“”,
期间:str=“”,#计费周期备注
)->dict:
"""构造出模板需要的参数"""
sn=创建_sn()
d={“房间”:单位,“社区”:社区名称,“sn”:sn}
d[“总计”]=str(总计)
d[“详细”]=总价和详细价格(总价)或“”
d[“账单名称”]=账单名称
d[“周期提示”]=“计费周期备注:“如果不是”
d[“期间”]=期间或
d[“提示”]=“备注:“如果不是”
d[“备注”]=备注或“
行数=1
对于bill\u id,bills.items()中的bill\u数据:
对于账单数据[“费用”]中的费用项目:
对于我负责的项目[“项目”]:
a、 b,c=f“n{line_num}1”,f“n{line_num}2”,f“n{line_num}3”
d[a]、d[b]、d[c]=i[“标题”]、i[“金额”]、i[“细节”]
行数+=1
对于范围(1,10)内的i:
对于范围(1,4)内的j:
k=f“n{i}{j}”
d、 设置默认值(k,“”)
返回d
def qrcode_路径(主机:str,社区名称:str,房间号:str)->str:
"""返回二维码图片地址,如果图片不存在就调用QR码生成它"""
媒体=“媒体”
p=Path(media)/“qrcodes”/community_name/f“{room_slug}.jpg”
如果没有,则p.存在()
如果不是p.parent.exists():
p、 parent.mkdir(parents=True)
导入QR码
如果“王海”不在主机中:
qr_主机=”https://www.esoaru.com"
其他:
qr_host=host.replace(“旺海”、“www”)
link=f“{qr\u host}/dist/bill/{room\u slug}/paper”
qrcode.make(link).save(p)
返回str(p)
创建_docx_by_sample.py
#!/usr/bin/env python
from pathlib import Path
from typing import Optional, Union
from docx import Document
from docx.shared import Cm
def docx_replace(
sample_path: Union[str, Path],
savepath: Union[str, Path],
params: dict,
images: Optional[dict] = None,
) -> None:
"""根据给定模板和参数, 构造新的Word文档, 并保存在本地"""
document = Document(sample_path)
if images is None:
images = {}
for paragraph in document.paragraphs:
for run in paragraph.runs:
rtext = run.text
for k, v in params.items():
vname = "${%s}" % k
if vname in rtext:
run.text = rtext.replace(vname, v)
for k, v in images.items():
vname = "${%s}" % k
if vname in rtext:
run.clear()
run.add_picture(v, height=Cm(4.75))
for paragraph in document.paragraphs:
ptext = paragraph.text
# print(ptext)
for k, v in params.items():
vname = "${%s}" % k
if vname in ptext:
paragraph.text = ptext.replace(vname, v)
for table in document.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
ptext = paragraph.text
for k, v in params.items():
vname = "${%s}" % k
if vname in ptext:
paragraph.text = ptext.replace(vname, v)
for k, v in images.items():
vname = "${%s}" % k
if vname in ptext:
# print(ptext)
paragraph.clear()
run = paragraph.add_run()
run.add_picture(v, height=Cm(4.0))
document.save(savepath)
def main() -> None:
params = {
"room": "10-005",
"sn": "5213",
"n11": "历史账单:",
"n12": "物业费",
"n13": "100.00",
"n21": "",
"n22": "停车费",
"n23": "200",
"n31": "7月账单:",
"n32": "物业费",
"n33": "100.00",
"n41": "",
"n42": "停车费",
"n43": "200",
"n51": "8月账单:",
"n52": "物业费",
"n53": "100.00",
"n61": "",
"n62": "停车费",
"n63": "200",
"n71": "",
"n72": "总计:",
"n73": "5320.00",
}
where = Path(__file__).parent
docx_replace(
where / "sample.docx",
where / "cuishoudan_demo.docx",
params,
{"img_paycode": str(where / "gyy.jpg")},
)
if __name__ == '__main__':
import sys
if 'test' in sys.argv:
main()
sample.docx:这似乎是可能的。@WaketZheng有什么函数我可以使用吗?@WaketZheng没有一个可以工作,我现在不知道怎么做,但我会在答案中发布一个关于更改docx内容的示例。