【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

这篇具有很好参考价值的文章主要介绍了【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景需求:

【办公类-22-01】周计划系列(1)-生成“信息窗”(提取旧docx内容,写入EXCLE模板,再次生成新docx)

前一篇介绍了生成”信息窗“的过程,本篇介绍周计划的第2款内容——主题说明的生成

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

  我发现:每当换一个教室,如果想要继续使用门前原有的信息窗结构,就要适应不同的板式风格。本次的信息窗都是A4横版的,因此原有的“信息+主题”合并版资料,以及全部竖版的4份资料内容,都需要修改成A4横版(竖版变成程横版)

思路:

把“2018年的中5班主题说明(8个Word-A4竖版)”中的内容,批量生成导成“2023年-中6班下学期主题说明(8个Word-A4横版)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

步骤: 

1、提取“2018年-中5班上学期主题说明”(8份docx)的内容,分别将”主题说明“”主题目标“”家园共育“里面的内容导入模板EXCLE的不同单元格中,

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)2、用{{}}的方法提取EXCEL数据,批量生成新内容、新格式的“2023年-中6班下学期主题说明”(8份docx)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

一、旧数据(2018年主题知识)的文件名的修改(01+docx):

0、材料准备:

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

1、旧文件名样式展示——2018年的,并且都是doc格式

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

2、把周次变成两位数(原文件已经是01 02格式了,所以这里不做编号)

3、把所有doc变成docx,否则不能提取

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 运行后,转为docx,删除原来的doc

import os
from win32com import client as wc
import time
#  注意:目录的格式必须写成双反斜杠
path="D:\\test\\02办公类\\90周计划4份\\02 主题知识2\\旧主题知识\\"  # 使用绝对地址(可更改)
files=[]
for file in os.listdir(path):
    # 找出文件中以.doc结尾并且不以~$开头的文件(~$是为了排除临时文件)
    if file.endswith('.doc') and not file.startswith('~$'): 
        files.append(path+file)
        for file in files:
            word = wc.Dispatch("Word.Application")
            print("已处理文件:"+files[0])
            # 打开文件
            doc = word.Documents.Open(files[0])
            # 将文件另存为.docx
            doc.SaveAs("{}x".format(files[0]), 12)    # 12表示docx格式
            doc.Close()
            # 删除原doc文件
            os.remove(files[0])
            # 在files数组中删除第一个文件地址(已处理的文件地址)
            del files[0]
            word.Quit()
            time.sleep(0.5) # 暂停0.5秒
 
 

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

doc转docx的效果

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

二、旧数据(2018年信息窗)的文件内容的修改(删除空行):

1、删除每个docx文档里面的空行

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

(无论有没有空行,都做一下删除,以便能够确定最后的索引范围)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)  

from docx import Document
from openpyxl import load_workbook
import glob

import os
path  = r'D:\test\02办公类\90周计划4份\02 主题知识2'



for file in glob.glob(path + r'\旧主题知识\*.docx'):   # 读取所有以前的信息窗参考资料
    doc = Document(file)
    for paragraph in doc.paragraphs:  # 读取文档段落
        if len(paragraph.text) == 0:
            p = paragraph._element
            p.getparent().remove(p)
            p._p = p._element = None
       
    doc.save(file)
# # ————————————————
# # 版权声明:本文为CSDN博主「lsjweiyi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# # 原文链接:https://blog.csdn.net/lsjweiyi/article/details/121728630

运行后,8份主题说明里面的空行都删除了,没有”空行、换行、手动换行符等“

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 (把去掉空行的8份Word放到“”docx(无空行)“”文件夹里面备用)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 三、信息窗Docx指定部分内容导入EXCLE内

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

1、docx模板制作——主题知识_模板.docx

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

2、EXCLE模板——主题知识过渡模板.xlsx

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 3、代码

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

# https://blog.csdn.net/lau_jw/article/details/114383781

from docx import Document
from openpyxl import load_workbook
import glob
 
#  将模板 Excel 读取进程序:
path  = r'D:\test\02办公类\90周计划4份\02 主题知识2'
workbook = load_workbook(path + r'\主题知识过渡模板.xlsx')
sheet = workbook.active

number = 0
 
for file in glob.glob(path + r'\旧主题知识\*.docx'):   # 读取所有以前的主题知识参考资料
    print(file)
    doc= Document(file)
   

    # 提取三个加粗标题所在的行数    # 参考https://www.shouxicto.com/article/96876.html

    #获取每个文档的行数  
    print("段落数:"+str(len(doc.paragraphs)))#段落数为13,每个回车隔离一段
    
    # 读取标题:
    title=[]
    for paragraph1 in doc.paragraphs[0:1]:        # 第0行标题
        t1 = paragraph1.text             # 只要原周计划中间的段落内容    
        title.append(t1[5:])
    print(title)      
    content1 = '\n'.join(title)      # 组合并加回车

    #输出每一段的内容
    for para in doc.paragraphs:    
        print(para.text) 

    # “主题说明“固定在1行,所以不用查找了 
    h0=1

    #查找“主题目标”所在的行
    for i in range(len(doc.paragraphs)):  
        # print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)  
        if '主题目标' in doc.paragraphs[i].text:
            h1=i
            print(h1)

    #查找“家园共育”所在的行
    for i in range(len(doc.paragraphs)):  
        if '家园共育' in doc.paragraphs[i].text:
            h2=i
            print(h2)

    #家园共育结束值等于-3
    h3=-3

    # 提取“主题说明”
    sm = []
    for paragraph2 in doc.paragraphs[h0+1:h1]:        #          主题说明h0固定是1行,所以从2开始提取,主题目标 是提取的行数h1-1, 索引取值,还是h1
        t2 = paragraph2.text               
        sm.append(t2)
    print(sm)    
    content2 = '\n'.join(sm)      # 组合并加回车

    # 提取“主题目标”
    mb = []
    for paragraph3 in doc.paragraphs[h1+1:h2]:        #          主题目标 是提取的行数+1,家园共育 提取行数-1 索引取值,还是h2
        t3 = paragraph3.text               
        mb.append(t3)
    print(mb)  
    content3 = '\n'.join(mb)      # 组合并加回车

    # 提取“家园共育”
    gy = []
    for paragraph4 in doc.paragraphs[h2+1:-2]:        #         家园共育 是提取的行数+1,删除最后两行的班级日期,范围是-2
        t4 = paragraph4.text             
        gy.append(t4)
    print(gy)  
    content4 = '\n'.join(gy)      # 组合并加回车


    number += 1
  
    
    sheet.append([number, content1,content2,content3,content4])  # number是序号,一共遍历提取了几分Word的内容,content是主题知识中间部分的内容
 
workbook.save(path + r'\中6班下学期主题知识.xlsx')

代码重点:

1、思路一:将“主题说明”等三个关键词批量加粗。

      但是目前读取的docx数据再次转换为docx时,所有的格式都清除了,目前还没有找到能够将关键词加粗的代码。要么手动将三个标题加粗。

2、思路二:读取“主题说明”等三个加粗标题所在的行数,

     观察代码,发现它是读取段落[0:X]的,只要确定起始段和终止段,就可以把中间的非加粗部分内容太提取出来。【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)  每份”主题知识。docx”的”主题说明“都在行数1,但”主题目标“”家园共育“的行数不同(3行和4行、6行和7行)。因此需要用代码进行提取 

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

提取到“加粗标题“的行数后,就可以制作索引范围,取出中间非加粗部分的内容写入EXCLE

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 4、写入EXCLE的内容1-代码直接导入的

(序号num、标题title、主题说明sm 、主题目标mb、家园共gy) 

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

5、写入EXCLE的内容2-手动复制进去的

把班级和合并后的周次日期复制到“中6班下学期主题知识.xlsx”的指定单元格内。

(也可以写个代码调入,这里就不写了,手动复制)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 (班级、时间)【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

四、EXCLE信息窗内容转化为新模板新时间的周计划

1、检查word模板

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 模板中输入各种{{English}}——标题加粗(黑体三号)、段落(1.5行距)、字体(宋体小三)、0空行……这些都在word模板里面调整好

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 2、检查EXCLE表格

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 3、代码展示

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os
import xlwt
import xlrd
import os
import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,time
import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT



zpath=r'D:\\test\\02办公类\\90周计划4份\\02 主题知识2'+'\\'
print(zpath)

file_path=zpath+r'\新主题知识(下学期)'
print(file_path)

# 二、遍历excel,逐个生成word(小标签.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

tpl = DocxTemplate(zpath+'主题知识_横版.docx')
list = pd.read_excel(zpath+'中6班下学期主题知识.xlsx')


title = list["title"].str.rstrip()
num=list["num"]
sm=list["sm"].str.rstrip()# 没有str.rstrip()是数字格式
mb=list["mb"].str.rstrip()# 没有str.rstrip()是数字格式
gy=list["gy"].str.rstrip()# 没有str.rstrip()是数字格式
classroom =list["classroom"].str.rstrip() # str.rstrip()都是文字格式
# T1 =list["T1"].str.rstrip() # 没有str.rstrip()是数字格式
# T2 =list["T2"].str.rstrip()# 没有str.rstrip()是数字格式
time=list["time"].str.rstrip() 

# 遍历excel行,逐个生成
numnum = list.shape[0]
for i in range(numnum):
    context = {
        "num": num[i],
        "title": title[i],
        "sm": sm[i],  
        "mb" :mb[i],
        "gy" :gy[i],      
        "classroom": classroom[i],       
        "time": time[i],      
       
    }
    tpl = DocxTemplate(zpath+'主题知识_横版.docx')
    tpl.render(context)
    tpl.save(file_path+r"\{}主题知识_{}({}班下学期).docx".format('%02d'%num[i],title[i],classroom[i]))


   

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 ​​​【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 五:最终效果展示:

基本都在一页A4横版上 

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

 

【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)  【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx) 

 六:后续操作

1、手动修改更新信息:

修改内容:主题说明的内容不修改,内容都是固定的。实际上只要调整板式、班级、日期

 2、确保在一页A4上:

有些周次的内容数量多,会超过一页。需要手动调整(删除空行、删除段落、调整间距等)

 3、多周一份

可以一次性批量打印好

感悟:

1、docx段落内容导入EXCEL,再转成新docx。速度快,可以反复修正。太神奇了!

2、完成第2个周计划”主题说明“的文本转移,后续继续研究育儿知识、周计划(教案)的内容转移。文章来源地址https://www.toymoban.com/news/detail-402077.html

到了这里,关于【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SSR-Encoder:用于主题驱动生成的通用编码器详解_AIGC-图片生成视频系列

    本文介绍了SSR-Encoder,一种用于主题驱动生成的通用编码器,能够根据文本提示或掩码查询生成图像,无需额外的测试时间微调。文章详细解释了SSR-Encoder的贡献概述、方法详解以及综合结果,展示了其在图像生成和视频生成方面的有效性。

    2024年02月02日
    浏览(120)
  • CMake教程系列-02-使用cmake代码生成二进制

    参考:Cmake安装以及升级(Ubuntu) Win10安装文件: 创建的目录以及代码如下: CMakeLists.txt sample.cpp 目录结构如下:注意多创建一个build目录存放中间文件和最终二进制文件 点击“Configure 我的的vs是2019,在Configure中选择了 点击“Configure”右边的“Generate”。 点击“Generate”右边

    2024年02月04日
    浏览(54)
  • 100天精通Python丨办公效率篇 —— 12、Python自动化操作 office-word(word转pdf、转docx、段落、表格、标题、页面、格式)

    本文收录于 《100天精通Python专栏 - 快速入门到黑科技》专栏 ,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造。 基础知识篇以理论知识为主 ,旨在帮助没有语言基础的小伙伴,学习我整理成体系的精华知识,快速入门构建起知识框架; 黑科技应用篇

    2023年04月18日
    浏览(51)
  • DocX 生成Word

    当然,这里是一个使用DocX库在.NET Core中操作Word文档的简单示例: 首先,确保你在项目中安装了DocX库。你可以在NuGet包管理器中搜索并安装 DocX 。 然后,使用以下代码来创建一个简单的Word文档并添加一些内容: 在这个示例中,我们首先创建了一个新的Word文档对象,并使用

    2024年02月13日
    浏览(32)
  • Springboot -- 按照模板生成docx、pdf文件,docx转pdf格式

    使用 poi-tl 根据模板生成 word 文件。 使用 xdocreport 将 docx 文件转换为 pdf 文件。 xdocreport 也支持根据模板导出 word ,但是 poi-tl 的功能更齐全,操作更简单,文档清晰。 poi-tl 、xdocreport 内部均依赖了 poi ,要注意两者中 poi 和 自身项目引用的 poi 的版本是否存在冲突。 使用 p

    2024年02月15日
    浏览(38)
  • 【实战分享】js生成word(docx)

    本文将记录如何从纯前端实现生成带图片的表格的word文件,并下载到本地。 docx文档地址 github地址 npm install --save docx 这里的用例最终生成文档内容长这样 如有不满足需求的地方,还是可以上它的官方文档看看,地址再贴一次 希望对大家有所帮助,毕竟我肝文档肝了一天,希望给

    2024年02月16日
    浏览(30)
  • vue 使用docx库生成word表格文档

            在Vue.js中生成Word表格文档,可以通过前端库来实现。这些库可以帮助我们轻松地将HTML表格转换为Word文档(通常是.docx格式)。以下是一些流行的前端库,它们可以用于在Vue项目中生成Word表格文档:                  docx是一个流行的JavaScript库,用于在浏览

    2024年02月21日
    浏览(56)
  • 【办公自动化】使用Python一键提取PDF中的表格到Excel

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理Excel 二、提取PDF表格到excel 三、往期推荐 文末推荐  文末福利   Pyth

    2024年02月13日
    浏览(55)
  • 主动打包、高效管理的主题工具:逐浪HMS主题大师1.5-即速推送、华为小组件缓存优化、锁屏提取、资源审计、技术秘笈,移动主题设计利器

    主动打包:逐浪HMS主题大师1.3-即速推送、华为小组件缓存优化、锁屏提取、资源审计、技术秘笈,移动主题设计利器 新版功能 研发背景 软件架构 使用环境 启动使用 联系我们 界面欣赏 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-daQWCR6K-1685

    2024年02月07日
    浏览(85)
  • python-自动篇-办公-案例-一键将word中的表格提取到excel文件中

    前提:您电脑上有python,还有就是编辑器vscode或其他 第一:您复制代码到vscode运行,花现下面的报错,这时候需要pip按照对应的库 其实就是在:cmd中输入:pip install +对应报错需要的库,如上是docx 当然,也不会很顺利只使用“pip”就能解决,比如 使用pip时,出现红色报错啦

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包