from docx import Document from docx.shared import Inches import sys import json def get_command_argv_by_sys(): # 默认值-测试 template = "template.docx" filename = "demo.docx" datafile = "" number = len(sys.argv) if 2 == number: template = sys.argv[1] if 3 == number: template = sys.argv[1] filename = sys.argv[2] if 4 == number: template = sys.argv[1] filename = sys.argv[2] datafile = sys.argv[3] return (template, filename, datafile) def readData(datafile): data = [ {"key": "{Title}", "value": "测试标题", "type": "text"}, {"key": "{文件内容}", "value": "测试内容内容内容", "type": "text"}, {"key": "{Table}", "value": 123, "type": "number"}, {"key": "{Picture}", "value": "A4.png", "type": "picture", "width": 1.25}, {"key": "{Table.No}", "value": "序号测试", "type": "text"}, {"key": "{Table.Name}", "value": "名称测试", "type": "text"}, {"key": "{Table.Col2}", "value": "列2", "type": "text"}, {"key": "{Table.Col3}", "value": "列3", "type": "text"}, ] if datafile != "": with open(datafile, "r", encoding="utf-8") as file: data = json.load(file) return data def replace(template, filename, data): docfile = Document(template) # 段落替换 for paragraph in docfile.paragraphs: for datum in data: if datum["key"] in paragraph.text: if "text" == datum["type"]: paragraph.text = paragraph.text.replace(datum["key"], datum["value"]) elif "picture" == datum["type"]: paragraph.clear() paragraph.add_run().add_picture(datum["value"], width=Inches(datum["width"])) elif "number" == datum["type"]: paragraph.text = paragraph.text.replace(datum["key"], str(datum["value"])) # 表格替换 for table in docfile.tables: for row in table.rows: for cell in row.cells: for datum in data: if datum["key"] in cell.text: if "text" == datum["type"]: cell.text = cell.text.replace(datum["key"], datum["value"]) elif "picture" == datum["type"]: paragraph = cell.paragraphs[0] paragraph.clear() paragraph.add_run().add_picture(datum["value"], width=Inches(datum["width"])) elif "number" == datum["type"]: cell.text = cell.text.replace(datum["key"], str(datum["value"])) docfile.save(filename) if __name__ == '__main__': params = get_command_argv_by_sys() template=params[0] filename=params[1] datafile=params[2] print(datafile) data=readData(datafile) print(data) replace(template, filename, data)