【办公类-89-01】20250103用“课题阶段资料模版“批量制作“7个课题档案袋“

背景需求

本学期的课题有4个大课题,3个小课题通过,需要做阶段资料。

一、初步设计

我很早以前就做好了Python代码(只有上学期),批量制作每个课题的阶段资料模版。因为小课题的编号没有出来,就一直没有发给课题负责人。

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os

print('----1、第一次新WORD制作--------')
# path = r"D:\test\02办公类\91周计划4份_20240901中2班\04 周计划7天"
path= r'C:\Users\jg2yXRZ\OneDrive\桌面\2024111上下学期课题模版批量\01模版'
print(path)


folder_path=path+r'\01上学期(docx)' 
# 替换为你的文件夹路径
docx_files = []

for root, dirs, files in os.walk(folder_path):
    for file in files:
        if file.endswith('.docx'):
            file_path = os.path.join(root, file)
            docx_files.append((file, file_path))

for file_name, file_path in docx_files:
    print(f"docx文件名 {file_name}")
    print(f"docx路径名: {file_path}")


    import xlrd  


    
    # 假设 path 是之前已经定义好的文件路径变量的一部分  
    file_paths = path + r'\总课题信息统计表.xlsx'  
    workbook = xlrd.open_workbook(file_paths)  
    sheet = workbook.sheet_by_index(0)  # 获取第一张工作表    
    

    # 遍历每一行,从第二行开始(索引为1,因为索引从0开始,但Excel从1开始计数行)  
    for row_idx in range(1,sheet.nrows):  # sheet.nrows 返回工作表中的行数  
        # 读取当前行的E到K列(列索引从0开始,但Excel列从1开始计数,所以E=4, ..., K=10)  
        row_data = sheet.row_values(row_idx, start_colx=4, end_colx=11)  
        # print(row_data)
        
        # 删除 row_data 中的空元素(None 或空字符串)  
        days = [cell for cell in row_data if cell is not None and cell != '']  
        
        # 统计每行非空元素的数量  (天数)
        item = len(days)  
        print(f'第{row_idx}行,本周天数是{item}天')    

        # 如果是5天就用5天模版,如果是7天,就用7天模版
        # doc_path=path+r'\01上学期(docx)'
        tpl = DocxTemplate(folder_path+fr'\{file_name}')
        WeeklyPlan = pd.read_excel(path+r'\总课题信息统计表.xlsx')

        

        # 没有str.rstrip()是数字格式
        # str.rstrip()都是文字格式
        
        num = WeeklyPlan["num"]
        title = WeeklyPlan["title"].str.rstrip()
        name =WeeklyPlan["name"].str.rstrip()     
        member =WeeklyPlan["member"].str.rstrip()     
        item=WeeklyPlan["item"].str.rstrip() 
        number =WeeklyPlan["number"].str.rstrip() 
        group =WeeklyPlan["group"].str.rstrip()   

        master = WeeklyPlan["master"].str.rstrip() 
        year1 = WeeklyPlan["year1"]
        month1= WeeklyPlan["month1"]
        year2= WeeklyPlan["year2"]

        month2= WeeklyPlan["month2"]
        first = WeeklyPlan["first"]
        second = WeeklyPlan["second"]
        third = WeeklyPlan["third"]

        d11 = WeeklyPlan["d11"]
        d12 = WeeklyPlan["d12"]
        d21 = WeeklyPlan["d21"]
        d22 = WeeklyPlan["d22"]
        d31 = WeeklyPlan["d31"]
        d32 = WeeklyPlan["d32"]

        start = WeeklyPlan["start"]
        end = WeeklyPlan["end"]

        # 遍历excel行,逐个生成
        # num = WeeklyPlan.shape[0]
        # print(num)
        for i in range(row_idx-1,row_idx):
            context = {
                "num": num[i],
                "title": title[i],
                "name": name[i],
                "member": member[i],
                "item": item[i],
                "number": number[i],
                "group": group[i],

                "master": master[i],
                "year1": year1[i],
                "month1": month1[i],
                "year2": year2[i],
                "month2": month2[i],
                "first": first[i],
                "second": second[i],
                "third": third[i], 

                "d11": d11[i], 
                "d12": d12[i], 
                "d21": d21[i],
                "d22": d22[i],
                "d31": d31[i],  
                "d32": d32[i],          
            
                "num": num[i],

                "start": start[i],
                "end": end[i],
                
                }        
            tpl.render(context)  
                # 假设 weekshu[i] 是类似于 '4、5' 或 '7' 这样的字符串

            
            # 姓名+课题阶段资料\01上学期\
            # name[i]_item[i]阶段资料\01上学期
            if len(item[i])==4: 
                # 无文件夹                   
                docx_path=path+fr'\10批量打包\{num[i]:02}{name[i]}_{item[i]}课题阶段资料\01上学期'
                # 有文件夹(只要生成前两个)空文件夹,去掉最后的.docx
                docx_path=path+fr'\10批量打包\{num[i]:02}{name[i]}_{item[i]}课题阶段资料\01上学期\{name[i]} {file_name[:-5]}'
                os.makedirs(docx_path,exist_ok=True)
            else:
                # 无文件夹 
                docx_path=path+fr'\10批量打包\{num[i]:02}{name[i]}_{item[i]}阶段资料\01上学期'
                # 有文件夹(只要生成前两个)空文件夹,去掉最后的.docx
                docx_path=path+fr'\10批量打包\{num[i]:02}{name[i]}_{item[i]}阶段资料\01上学期\{name[i]} {file_name[:-5]}'
                os.makedirs(docx_path,exist_ok=True)
            
            tpl.save(docx_path+fr"\{name[i]} {file_name}")

以上代码只做了上学期的模版,包含两种样式(在文件夹里有DOCX,和所有DOCX在一起)

二、代码改良

一直拖到1月份,才知道小课题没有编号了。当时上半学期资料已经提交了,我在批注时发现负责人们使用的模版不一样

由于没有序号标注,文件首字不同导致文本排序没有按照目录,一部分批注时间就用来提示基础信息的填写。

每个人的阶段内容相同但是排序不同,所以我还是想把每一份文件DOCX的序号统一。

所以我再次修改了一下代码,把上下学期的模版都做好了。

课题成员基本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值