代码拉取完成,页面将自动刷新
同步操作将从 beatlesoasis/excel_to_word 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env python3
from dataclasses import replace
from re import template
import sys, os
import argparse
import pandas as pd
from docx import Document
import copy
class ExcelParser:
def __init__(self):
self.df = pd.DataFrame()
self.header_patterns = []
def parse_excel(self, filename, sheetname):
self.df = pd.read_excel(filename, sheet_name = sheetname)
self.__parse_header_pattern()
def __parse_header_pattern(self):
header = self.df.head()
for v in header:
l = v.split("/")
if len(l) > 1:
self.header_patterns.append(l[-1])
else:
self.header_patterns.append("")
class WordPatternReplacer:
def __init__(self):
return
def read_word(self, wordfile):
self.__word_template_orign = Document(wordfile)
self.__word_template = copy.deepcopy(self.__word_template_orign)
def reset(self):
del(self.__word_template)
self.__word_template = copy.deepcopy(self.__word_template_orign)
def replace_pattern(self, pattern, target):
for p in self.__word_template.paragraphs:
for r in p.runs:
r.text = r.text.replace(pattern, target)
# patterns, targets should be iterable
def replace_patterns(self, patterns, targets):
assert len(patterns) == len(targets)
for p in self.__word_template.paragraphs:
for r in p.runs:
for i in range(len(patterns)):
if patterns[i] != "":
r.text = r.text.replace(patterns[i], str(targets[i]))
def save_file(self, filename):
self.__word_template.save(filename)
def replace_pattern_in_template(excel_filepath: str, sheet_name: str, template_word_filepath: str):
# parse xls
ep = ExcelParser()
ep.parse_excel(excel_filepath, sheet_name)
# read template
wp = WordPatternReplacer()
wp.read_word(template_word_filepath)
template_word_filename = os.path.basename(template_word_filepath)
template_word_filedir = os.path.dirname(template_word_filepath)
for i in range(len(ep.df)):
wp.reset()
wp.replace_patterns(ep.header_patterns, ep.df.iloc[i,:].to_list())
wp.save_file("%s/%s-%s"%(template_word_filedir, ep.df.iloc[i, 0], template_word_filename))
if __name__ == "__main__":
# examine the parameter
parser = argparse.ArgumentParser()
parser.add_argument("-x", nargs = 2, dest = "excel_file", help="input excel file")
parser.add_argument("-w", dest = "template_word_file", help="input temple word file")
args = parser.parse_args()
if not args.excel_file or not args.template_word_file:
parser.print_help()
exit(0)
else:
print("""the input file:
source excel file: %s
template word file: %s
""" % (args.excel_file, args.template_word_file))
replace_pattern_in_template(args.excel_file[0], args.excel_file[1], args.template_word_file)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。