diff --git a/data.json b/data.json index 7d4de48..2e1b226 100644 --- a/data.json +++ b/data.json @@ -56,4 +56,15 @@ } ] } + , + { + "key": "{List}", + "type": "list", + "value": [ + "A1队列3的生存性最高,机动时间0s,机动距离0m,综合生存能力为0,隐蔽等级为1,道路性质为0;", + "A2队列3的生存性最高,机动时间0s,机动距离0m,综合生存能力为0,隐蔽等级为1,道路性质为0;", + "A3队列3的生存性最高,机动时间0s,机动距离0m,综合生存能力为0,隐蔽等级为1,道路性质为0;", + "A4队列3的生存性最高,机动时间0s,机动距离0m,综合生存能力为0,隐蔽等级为1,道路性质为0;" + ] + } ] \ No newline at end of file diff --git a/main.py b/main.py index b685bd7..7425088 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,15 @@ import json import sys - +from copy import deepcopy from docx import Document from docx.shared import Inches -from docx.enum.text import WD_PARAGRAPH_ALIGNMENT def get_command_argv_by_sys(): # 默认值-用于测试 template_path = "template.docx" - #template_path = "test.docx" filename_path = "demo.docx" datafile_path = "data.json" - #datafile_path = "data_1.json" - cycle = 0 + # 读取参数 number = len(sys.argv) if 2 == number: @@ -24,12 +21,8 @@ def get_command_argv_by_sys(): template_path = sys.argv[1] filename_path = sys.argv[2] datafile_path = sys.argv[3] - if 5 == number: - template_path = sys.argv[1] - filename_path = sys.argv[2] - datafile_path = sys.argv[3] - cycle = sys.argv[4] - return template_path, filename_path, datafile_path,cycle + + return template_path, filename_path, datafile_path def read_data(filepath): @@ -58,6 +51,21 @@ def replace(template_path, filename_path, data_json): 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"])) + elif "list" == datum["type"]: + p = paragraph._p + index = list(document_file.element.body.iterchildren()).index(p) + key = datum["key"] + values = datum["value"] + for i in range(0,len(values)): + paragraph = deepcopy(p) + document_file.element.body.insert(index + i + 1, paragraph) + paragraph.clear() + + for i in range(0, len(values)): + val = values[i] + paragraph = document_file.paragraphs[index - 1 + i] + paragraph.text = paragraph.text.replace(key, str(val)) + # 表格替换 for table in document_file.tables: @@ -91,90 +99,17 @@ def replace(template_path, filename_path, data_json): document_file.save(filename_path) return 0 -def foreach(template_path, filename_path, data_json): - try: - document_file = Document(template_path) - except: - return 2 - - placeholder = [] - loop = False - i = 0 - for paragraph in document_file.paragraphs: - text = paragraph.text - if "$[" == text: - loop = True - paragraph.clear() - p = paragraph._element - p.getparent().remove(p) - p._p = p._element = None - continue - elif "]$" == text: - loop = False - paragraph.clear() - p = paragraph._element - p.getparent().remove(p) - p._p = p._element = None - z = 0 - for datum in data_json: - for item in placeholder: - key = item["paragraph"].text.replace("{", "").replace("}", "") - style = item["paragraph"].style - if key == datum["key"]: - if "text" == datum["type"]: - paragraph = document_file.add_paragraph(datum["value"], style=style) - paragraph._element.getparent().insert(z, paragraph._element) - elif "picture" == datum["type"]: - paragraph = document_file.add_paragraph(style=style) - paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER - paragraph.add_run().add_picture(datum["value"], width=Inches(datum["width"])) - paragraph._element.getparent().insert(z, paragraph._element) - elif "number" == datum["type"]: - paragraph = document_file.add_paragraph(str(datum["value"]), style=style) - paragraph._element.getparent().insert(z, paragraph._element) - # else: - # paragraph = document_file.add_paragraph(item["text"], style=style) - # paragraph._element.getparent().insert(z, paragraph._element) - z += 1 - - placeholder = [] - - - - if loop: - placeholder.append({"paragraph": paragraph, "key": text.replace("{", "").replace("}", ""), "style": paragraph.style,"text":text, "index": i}) - p = paragraph._element - p.getparent().remove(p) - p._p = p._element = None - else: - if text.startswith("{") and text.endswith("}"): - for datum in data_json: - if datum["key"] in text: - key = "{" + datum["key"] + "}" - if "text" == datum["type"]: - paragraph.text = paragraph.text.replace(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(key, str(datum["value"])) - i += 1 - - document_file.save(filename_path) - return 0 - def main(): params = get_command_argv_by_sys() - [template, filename, datafile, cycle] = params + [template, filename, datafile] = params data = read_data(datafile) if len(data) == 0: return 1 else: - if cycle == 0: - return replace(template, filename, data) - else: - return foreach(template, filename, data) + return replace(template, filename, data) + if __name__ == '__main__': print(main()) + diff --git a/template.docx b/template.docx index 9febc0b..ce5747a 100644 Binary files a/template.docx and b/template.docx differ