背景需求
学期总结开始写各种总结
同事请我代写
我手里写5个老师要写。就想试试能不能用“星火讯飞写稿子”+Python(excle \word)批量生成)
一、AI生成读后感
星火讯飞写出来的读后感内容相同,所以要用不同的关键词
1、不同岗位:假如您是一位班主任、假如您是一位幼儿园管理者、假如您是一位保育工作者)
2、同样都是幼儿老师,就在“于漪老师事迹”后面写,围绕“幼儿发展优先分析”“谈谈师幼互动”“结合理解发现支持幼儿”等不同的元素写
3、字数是1000字。但总体感觉很少,下次用2000字,但可能也就1000字
篇幅有限这里不介绍如何获取读后感文字,只是把文字都贴入EXCLE的content内
从AI复制的读后感,要选中单元格,点击顶部的输入框,把文字全部贴入,这样文字都在一个单元格里,才能一次性写入(重要)
此外每个单元格第一行要空(手动换行符)
二、删除单元格里的手动换行符
测试后发现还是需要再EXCEL里删除手动换行符(空行),而不是在Python里修改
EXCEL用VBA宏进行换行符的替换
第1步:在EXCEL界面上ALT+F11
第2步:VBA窗体 插入-模块
第3步:黏贴代码
VBA代码
Sub 删除单元格内空行()Dim cell As RangeFor Each cell In SelectionIf InStr(cell.Value, Chr(10)) > 0 Thencell.Value = Replace(cell.Value, Chr(10), "123")End IfNext cell
End Sub
第4步:两次关闭
第5步:选中读后感(有换行符空行)
第6步:开发工具-宏-选中刚才代码-运行
第7步:所有换行符空行都被改成123(如果有两个123,说明这里面有两个连续的换行符也就是一个是空行)
保存EXCEL关闭
三、制作WORD模版
本次需要制作两个内容相同,标题不同的读后感
(一)工会学后感
原始样式
修改后样式
(二)校本研修小结
原始样式
修改后样式
特别说明:
读后感content部分的字体是宋体小四,但是我每次导入后,会变成宋体小五
原来是模版里预设的正文样式字体就是宋体小五。所以我把正文样式字体改成小四,就解决了问题。
四、EXCEL制作
五、代码展示
from docxtpl import DocxTemplate
import pandas as pd
import os,time
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt
import win32com.client as win32from docxtpl import DocxTemplate
import pandas as pd
import os
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt
import win32com.client as win32zpath = r'C:\Users\jg2yXRZ\OneDrive\桌面\校本研修'print('-------------1、生成WORD-------------')n=['工会学后感','校本研修小结']for x in n:template_path = os.path.join(zpath, f'{x}.docx')output_path = os.path.join(zpath, '整理')os.makedirs(output_path, exist_ok=True) tpl = DocxTemplate(template_path)autho = pd.read_excel(os.path.join(zpath, 'autho.xlsx'))num = autho["num"].astype(str).str.rstrip() # name = autho['name'].str.rstrip() # title = autho['title'].str.rstrip()content = autho['content'].str.rstrip()# printnum1 = autho.shape[0]for i in range(num1):context = {"num": num[i],"name": name[i],"title": title[i],"content": content[i],}tpl = DocxTemplate(template_path)tpl.render(context)output_filename = f"{int(num[i]):02} {name[i]} {x}.docx"output_file_path = os.path.join(output_path, output_filename)# try:tpl.save(output_file_path)print('-------------2、123替换硬回车和缩进四字符-------------')def replace_text_in_docx(docx_path, old_text, new_text):doc = Document(docx_path)for para in doc.paragraphs:if old_text in para.text:para.text = para.text.replace(old_text, new_text)doc.save(docx_path)for root, dirs, files in os.walk(output_path):for file in files:if file.endswith(".docx"):file_path = os.path.join(root, file)replace_text_in_docx(file_path, "123123", "\n ")replace_text_in_docx(file_path, "123", "\n ")print('-------------3、删除第一个软回车-------------')
(一)获取有123的文档
(二)123变成软回车(替换原来位置)
(三)删除第一个软回车
本文样式是前面5行要的,第6行就是第一段内容,因此这里多的一个软回车需要删除
还没有运行成功,目前找不到Python解决方法,暂时可以考虑把读后感贴入EXCEL时,预先就把第一行的空行删除,然后把第一段前面手动添加四个空格。