当前位置: 首页 > article >正文

【办公类-48-04】202506每月电子屏台账汇总成docx-5(问卷星下载5月范围内容,自动获取excel文件名,并转移处理)

背景需求:

1-4月电子屏表格,都是用这个代码将EXCEL数据整理成分类成3个WORD表格。

【办公类-48-04】20250118每月电子屏台账汇总成docx-4(提取EXCLE里面1月份的内容,自制月份文件夹)-CSDN博客文章浏览阅读1.2k次,点赞29次,收藏9次。【办公类-48-04】20250118每月电子屏台账汇总成docx-4(提取EXCLE里面1月份的内容,自制月份文件夹) https://blog.csdn.net/reasonsummer/article/details/145230274?spm=1011.2415.3001.5331

存在问题:

每月都要把下载EXCEL名称复制到代码内,有点麻烦。

我希望只要把EXCEL放到文件夹下,程序就能自动转移到2025年5月文件夹内。并识别它做三个WORD表格

deepseek的答案

20250603,获取5月的所有EXCEL,导出文本EXCEL

放到一级文件夹下

然后用代码慢慢生成

'''
电子屏台账2025年5月,自动提取当月内容(在XX之间的内容),制作当月文件夹
把EXCEL放在一级文件夹下,自动读取它并转移到2025年5月文件夹
自动识别2025年5月文件夹内的EXCEL,开始制作三个园区台账WORD,并打包rar
作者:星火讯飞、deepseek、阿夏
时间:20240603
'''print('----1、读取EXCEL内容并合并成关键列表------')import os
import shutilimport pandas as pd
path= r'C:\Users\jg2yXRZ\OneDrive\桌面\电子屏每月2024'year=2025
# int(input('几年(2025?\n'))
month=int(input('几月?(4)\n'))garden=['总园', '一分园','二分园']folder_path = path+fr"\{year}年{month:02}月"
os.makedirs(folder_path,exist_ok=True)folder_name=folder_path+fr'\(以此为准){year}年{month:02}月电子屏台账(三个园区)'
os.makedirs(folder_name,exist_ok=True)# 把EXCLe复制到2025年1月文件夹
file_name = '279855026_20240901Jg2y各园部重点部位电子屏、播控系统_956f958e-4232-47d7-a6bb-2c086e4ade44.xlsx'# 把问卷星下载的xlsx转移到2025年1月文件夹内
# 定义源文件和目标文件夹路径
src_file = path+fr'\{file_name}'
dst_folder = folder_path
dst_file = os.path.join(dst_folder, f'{file_name}') 
# 移动文件到目标文件夹
shutil.move(src_file, dst_file)# 279855026_按文本_20240901Jg2y各园部重点部位电子屏、播控系统_83_83.xlsx'
file_path = os.path.join(folder_path, file_name)
print(file_path)# 按行读取
df = pd.read_excel(file_path)
filtered_rows = df.iloc[:, 6:22].values.tolist()  # G列到W列的数据,按行转换为列表
# print(rows)# 提取符合的日期print('----1、初始化一个空列表来存储符合条件的行(数字是01的月份)------')
# 
rows = []# 遍历每一行
for row in filtered_rows:# 获取第9个元素(索引从0开始,所以是14)cell_value = str(row[9])# print(cell_value)# 检查第5-6个字符是否为“01”if cell_value[5:7] == f"{month:02}":rows.append(row)# # 打印符合条件的行
print(rows)for x in range(len(garden)):all_data=[]for y in range(len(rows)):if rows[y][0][2:]==garden[x]:# print(rows[y])for row in rows[y][1:]:# print(row)if row=='(跳过)':passelse:    all_data.append(row)# print(all_data)# print(len(all_data))# 462print('----1、读取EXCEL内容并合并成关键列表------')import pandas as pd# # 每行有几个内容h=7# print(h)# # 拆分成7个一组nested_lists = [all_data[i:i+h] for i in range(0, len(all_data), h)]# print(nested_lists)# print(len(nested_lists))
#     # #  26# 如果条数不满20条,只有一页if len(nested_lists) <=20:print(f"{len(nested_lists)} 在范围 0-20 内")kong = 20 - len(nested_lists)print(kong)Y = 1# 判断多页情况下,最后一页是否能够凑满20行,凑不满,补空else: for z in range(20, 220, 20):if z < len(nested_lists) <= z + 20:# 出现过正好40条,只有两页,但出现了第3空页,少了小于等于z+2-print(f"{len(nested_lists)} 在范围 {z}-{z+20} 内")# 补多少的空格kong = z + 20 - len(nested_lists)print(kong)# 有几页Y = int((z + 20) / 20)# 一个列表里面有7个空w = [''] * h# 需要14个这种7空的嵌套列表v = [w] * kong# print(v)# 把实际的填写内容+补充的空格,凑满20的倍数页nested_lists=nested_lists+v# print(nested_lists)# print(len(nested_lists))#  80  # 拆分合并每个格子的内容new=[]for n in range(len(nested_lists)):    # 66行# 如果读取的第一个内容为空if nested_lists[n][1]=='':for g in range(h):new.append('')else:# 添加序号不用加0new.append(n+1)# 电子屏ID '总园 校门口电子屏 402XXXXXXXX TY2021XXXXXX'    split_list = nested_lists[n][1].split(' ')# print(split_list)# 将空格切开变成列表new.append(split_list[2])# 资产编号	new.append(split_list[3])   # 时间	(日期+时间new.append(nested_lists[n][2][:4]+'年'+nested_lists[n][2][5:7]+'月'+ \nested_lists[n][2][-2:]+'日'+str(nested_lists[n][3])+':'+str('%02d'%nested_lists[n][4]))# 操作内容	new.append(nested_lists[n][5])# 进出人员	(负责人)new.append(nested_lists[n][0])# 审核领导(园所管理主任)new.append(nested_lists[n][6])print(new)print(len(new))# 560 /7/20=4页print('----2、读取docx模板的数量------')# 读取word的行列数from docx import Documentdoc_name = '电子屏台账模板.docx'doc_path = os.path.join(path, doc_name)# 打开文档doc = Document(doc_path)# 获取第一个表格table = doc.tables[0]# 获取表格的行数和列数num_rows = len(table.rows)num_cols = len(table.columns)# print("行数:", num_rows)# # 22# print("列数:", num_cols)# 7# 每页格子的坐标bg=[]for a in range(2,22):for b in range(7):bg.append('{}{}'.format('%02d'%a,'%02d'%b))# print(bg)# print(len(bg))# 140# 拆分成4页每页20个个一组c=int(len(new)/Y)content_lists = [new[i:i+c] for i in range(0, len(new), c)]# print(content_lists)# print(len(content_lists))# 15# 4  拆20行内容一组,一共4个嵌套列表# 列表new内容写入docx模板,第一页写入20行*7的内容import os,timefrom docx import Documentfrom docx.shared import Pt, RGBColorfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.oxml.ns import qnfrom docx2pdf import convertfrom PyPDF2 import PdfMerger# 多少份(必须双数)ziti = '宋体'size = 14imagePath = folder_path+r'\零时Word'if not os.path.exists(imagePath):os.makedirs(imagePath)for n in range(len(content_lists)):doc = Document(doc_path)# for b in range(0):table = doc.tables[0]for t in range(len(bg)):pp, qq, k = int(bg[t][0:2]), int(bg[t][2:4]), content_lists[n][t]run = table.cell(pp, qq).paragraphs[0].add_run(str(k))run.font.name = zitirun.font.size = Pt(size)run.bold = Falserun.font.color.rgb = RGBColor(0, 0, 0)r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), ziti)table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTERdoc.save(imagePath+fr'\{n:02d}.docx')time.sleep(2)print('-----3、创建一个带页码的docx,合并word模板------')from docx import Documentfrom docx.enum.section import WD_SECTION_STARTimport osfrom docx.shared import Cm# # 创建一个带页码的空Document对象,并把页眉页脚边距改小source_dir = imagePath  # 文件夹路径combined_doc = Document(path+r'\页码.docx')# 读取“整理”里面的docx的内容docx_files = []for file_name in os.listdir(source_dir):if file_name.endswith(".docx"):docx_files.append(os.path.join(source_dir, file_name))for file in docx_files:doc = Document(file)for element in doc.element.body:combined_doc.element.body.append(element)    output_file = folder_name + fr'\{year}年{month:02}月({garden[x]})电子屏台账.docx' # 输出文件路径output_file1 = folder_name + fr'\{year}年{month:02}月({garden[x]})电子屏台账2.docx' # 输出文件路径combined_doc.save(output_file)time.sleep(2)print('-----4、把“合并docx"的第一段回车删除。(页码模板自带)---')doc = Document(output_file)# 删除第1个段落(都只有一个回车)for i in [0]:dell_paragraph = doc.paragraphs[i]doc._element.body.remove(dell_paragraph._element)# 保存文档doc.save(output_file)# time.sleep(2)print('-----5、替换园区---')import win32com.client as win32# 创建Word应用程序对象word_app = win32.gencache.EnsureDispatch("Word.Application")# 打开Word文档doc = word_app.Documents.Open(output_file)# 创建Find对象find_object = doc.Content.Find# 设置查找和替换参数find_object.Text = "园区"find_object.Replacement.Text = garden[x]find_object.Forward = Truefind_object.Wrap = 1find_object.Format = Falsefind_object.MatchCase = Falsefind_object.MatchWholeWord = Falsefind_object.MatchWildcards = Falsefind_object.MatchSoundsLike = Falsefind_object.MatchAllWordForms = False# 执行查找和替换find_object.Execute(Replace=2)# 保存文档doc.SaveAs(output_file)# 关闭文档和应用程序doc.Close()word_app.Quit()time.sleep(2)# 删除word临时文件夹import shutilshutil.rmtree(imagePath)# 定义要打包的文件夹名称
shutil.make_archive(folder_name, 'zip', folder_name)

excel转移到2025年05月文件夹内。

最后效果

相关文章:

【办公类-48-04】202506每月电子屏台账汇总成docx-5(问卷星下载5月范围内容,自动获取excel文件名,并转移处理)

背景需求&#xff1a; 1-4月电子屏表格&#xff0c;都是用这个代码将EXCEL数据整理成分类成3个WORD表格。 【办公类-48-04】20250118每月电子屏台账汇总成docx-4&#xff08;提取EXCLE里面1月份的内容&#xff0c;自制月份文件夹&#xff09;-CSDN博客文章浏览阅读1.2k次&…...

对 `llamafactory-cli api -h` 输出的详细解读

llamafactory-cli 是 LlamaFactory 项目提供的命令行接口工具&#xff0c;它允许用户通过命令行参数来配置和运行大型语言模型的各种任务&#xff0c;如预训练&#xff08;PT&#xff09;、有监督微调&#xff08;SFT&#xff09;、奖励模型训练&#xff08;RM&#xff09;、基…...

基于 ZYNQ UltraScale+ OV5640的高速图像传输系统设计,支持国产替代

引 言 随着电子信息技术的不断进步&#xff0c;人工智能、医 疗器械、机器视觉等领域都在高速发展 [1] &#xff0c;工业相机 是机器视觉系统中的一部分 [2] &#xff0c;对工业相机而言&#xff0c;传 输图像的速率、传输过程的抗干扰能力是其关键&#xff0c; 工业相…...

demo_win10配置WSL、DockerDesktop环境,本地部署Dify,ngrok公网测试

win10配置WSL、DockerDesktop环境&#xff0c;本地部署Dify&#xff0c;ngrok分享测试 一、配置WSL 1.1 开启Hyper-V 安装WSL2首先要保证操作系统可以开启hyper-v功能&#xff0c;默认支持开启hyper-v的版本为&#xff1a;Windows11企业版、专业版或教育版,而家庭版是不支持…...

TablePlus:一个跨平台的数据库管理工具

TablePlus 是一款现代化的跨平台&#xff08;Window、Linux、macOS、iOS&#xff09;数据库管理工具&#xff0c;提供直观的界面和强大的功能&#xff0c;可以帮助用户轻松管理和操作数据库。 TablePlus 免费版可以永久使用&#xff0c;但是只能同时打开 2 个连接窗口&#xff…...

SQL Indexes(索引)

目录 Indexes Using Clustered Indexes Using Nonclustered Indexes Declaring Indexes Using Indexes Finding Rows Without Indexes Finding Rows in a Heap with a Nonclustered Index Finding Rows in a Clustered Index Finding Rows in a Clustered Index with …...

Axure 基础入门

目录 认识产品经理 项目团队* 基本概述 认识产品经理 A公司产品经理 B公司产品经理 C公司产品经理 D公司产品经理 产品经理工作范围 产品经理工作流程* 产品经理的职责 产品经理的分类 产品经理能力要求 产品工具 产品体验报告 原型设计介绍 原型设计概述 为…...

结构型设计模式之Decorator(装饰器)

结构型设计模式之Decorator&#xff08;装饰器&#xff09; 前言&#xff1a; 本案例通过李四举例&#xff0c;不改变源代码的情况下 对“才艺”进行增强。 摘要&#xff1a; 摘要&#xff1a; 装饰器模式是一种结构型设计模式&#xff0c;允许动态地为对象添加功能而不改变其…...

HCIP-Datacom Core Technology V1.0_3 OSPF基础

动态路由协议简介 静态路由相比较动态路由有什么优点呢。 静态路由协议&#xff0c;当网络发生故障或者网络拓扑发生变更&#xff0c;它需要管理员手工配置去干预静态路由配置&#xff0c;但是动态路由协议&#xff0c;它能够及时自己感应网络拓扑变化&#xff0c;不路由选择…...

工作自动化——工作自动提炼--智能编程——仙盟创梦IDE

工作自动化中的自动提炼、自动比对代码生成日志&#xff0c;为软件开发与项目管理带来诸多好处。 自动提炼能从复杂代码中精准提取关键信息&#xff0c;节省人工梳理时间&#xff0c;开发人员可快速把握核心逻辑&#xff0c;加速项目熟悉进程。自动比对代码则及时发现版本间差异…...

go语言学习 第 2 章:变量与数据类型

第 2 章&#xff1a;变量与数据类型 在 Go 语言中&#xff0c;变量和数据类型是构建程序的基础。理解它们的使用方式和特性&#xff0c;对于编写高效、可维护的代码至关重要。本章将详细介绍变量的声明、初始化、使用以及 Go 语言中的各种数据类型。 一、变量的声明与初始化 …...

大语言模型评测体系全解析(上篇):基础框架与综合评测平台

文章目录 一、评测体系的历史演进与技术底座&#xff08;一&#xff09;发展历程&#xff1a;从单任务到全维度评测1. 2018年前&#xff1a;单数据集时代的萌芽2. 2019-2023年&#xff1a;多任务基准的爆发式增长3. 2024年至今&#xff1a;动态化、场景化、多模态体系成型关键节…...

Spring Event(事件驱动机制)

一、Spring Event 应用场景 1. 业务解耦 当一个业务操作触发多个后续动作时&#xff0c;用事件解耦各个动作&#xff0c;避免代码耦合。 比如&#xff1a;用户注册后同时发送欢迎邮件、积分赠送、日志记录等&#xff0c;这些逻辑可以通过事件发布多个监听器异步处理。 2. 跨模…...

Fisher准则例题——给定类内散度矩阵和类样本均值

设有两类样本&#xff0c;两类样本的类内散度矩阵分别为 S 1 ( 1 1 / 2 1 / 2 1 ) , S 2 ( 1 − 1 / 2 − 1 / 2 1 ) S_1 \begin{pmatrix} 1 & 1/2 \\ 1/2 & 1 \end{pmatrix}, \quad S_2 \begin{pmatrix} 1 & -1/2 \\ -1/2 & 1 \end{pmatrix} S1​(11/2​1…...

MySQL数据库中INNODB表数据的备份与恢复

使用数据库时,其中非常重要的一块内容就是数据的安全,而保障数据安全的重要手段是数据备份与还原恢复。目前,我们主要的备份手段有逻辑备份、物理备份,逻辑备份一般适用范围很广,可以适用于解决不同版本间的备份与恢复,但一般执行时间长,而且备份占用空间大。这里介绍一…...

振动分析师(ISO18436-2)四级能力矩阵 - 简介

本文的内容绝大多数来自&#xff1a;VCAT-II Vibration Analyst - Mobius Institute相关振动分析员培训招生彩页&#xff0c;特此致谢&#xff01;内容整理参见&#xff1a;振动分析师四级能力矩阵 - 知乎。 CAT I 振动分析技术员 1.1角色画像 Collect vibration dataValida…...

生产环境MYSQL常见锁表场景

前言 锁表是我们在生产环境十分常见的问题之一&#xff0c;解决问题前需要先了解锁表产生的原因以找到解决方案&#xff0c;并制定方案以预防锁表&#xff0c;本文接下来会分别模拟元数据锁表&#xff08;MDL锁&#xff09;、行锁升级为表锁、死锁、**显示锁表 **四种锁表情形…...

结构性设计模式之Composite(组合)

结构性设计模式之Composite&#xff08;组合&#xff09; 摘要&#xff1a; Composite&#xff08;组合&#xff09;模式通过树形结构表示"部分-整体"层次关系&#xff0c;使得用户能够统一处理单个对象和组合对象。该模式包含Component&#xff08;组件接口&#x…...

Java面试八股--04-MySQL

致谢&#xff1a;感谢整理&#xff01;2025年 Java 面试八股文&#xff08;20w字&#xff09;_java面试八股文-CSDN博客 目录 1、Select语句完整的执行顺序 2、MySQL事务 3、MyISAM和InnoDB的区别 4、悲观锁和乐观锁怎么实现 5、聚簇索引与非聚簇索引区别 6、什么情况下my…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(31):そう

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(31):そう 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习(2) そう1,いAくな+さそうでう。2,なAな + そうです。3,いいです ー>よさそうです。4、x Xの状況(じょうきょう)5、みたい & ら…...

设计模式——访问者设计模式(行为型)

摘要 访问者设计模式是一种行为型设计模式&#xff0c;它将数据结构与作用于结构上的操作解耦&#xff0c;允许在不修改数据结构的前提下增加新的操作行为。该模式包含关键角色如元素接口、具体元素类、访问者接口和具体访问者类。通过访问者模式&#xff0c;可以在不改变对象…...

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题。主要涉及线性回归、回归的显著性、回归系数的置信区间。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…...

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》

大家好呀&#xff01;今天我们来聊聊Java世界里那些"看不见摸不着"但又超级重要的东西——对象在内存里是怎么"住"的&#xff0c;以及JVM这个"超级管家"是怎么帮我们优化管理的。放心&#xff0c;我会用最接地气的方式讲解&#xff0c;保证连小学…...

LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 下

上部分链接&#xff1a;LeetCode 高频 SQL 50 题&#xff08;基础版&#xff09; 之 【高级查询和连接】 上 题目&#xff1a;1164. 指定日期的产品价格 题解&#xff1a; select product_id,10 price from Products group by product_id having min(change_date) > 201…...

Java并发编程:读写锁与普通互斥锁的深度对比

在Java并发编程中&#xff0c;锁是实现线程安全的重要工具。其中&#xff0c;普通互斥锁&#xff08;如synchronized和ReentrantLock&#xff09;和读写锁&#xff08;ReentrantReadWriteLock&#xff09;是两种常用的同步机制。本文将从多个维度深入分析它们的区别、适用场景及…...

Spring Boot Actuator未授权访问漏洞修复

方案1&#xff1a;在网关的配置文件里增加以下配置 management:endpoints:web:exposure:include: []enabled-by-default: falseendpoint:health:show-details: ALWAYS 方案二&#xff1a;直接在nginx配置拦截actuator相关接口 location /actuator { return 403; …...

机器学习——SVM

1.什么是SVM 支持向量机&#xff08;support vector machines&#xff0c;SVM&#xff09;是一种二分类模型&#xff0c;它将实例的特征向量映射为空间中的一些点&#xff0c;SVM 的目的就是想要画出一条线&#xff0c;以 “最好地” 区分这两类点&#xff0c;以至如果以后有了…...

【音视频】FFmpeg 硬件(NVDIA)编码H264

FFmpeg 与x264的关系 ffmpeg软编码是使⽤x264开源项⽬&#xff0c;也就是说ffmpeg软编码H264最终是调⽤了x264开源项⽬&#xff0c;所以我们要先理解ffmpeg和x264的调⽤关系&#xff0c;这⾥我们主要关注x264_init。对于x264的参数都在 ffmpeg\libavcodec \libx264.c x264\co…...

贪心算法应用:超图匹配问题详解

贪心算法应用&#xff1a;超图匹配问题详解 贪心算法在超图匹配问题中有着广泛的应用。下面我将从基础概念到具体实现&#xff0c;全面详细地讲解超图匹配问题及其贪心算法解决方案。 一、超图匹配问题基础 1. 超图基本概念 **超图&#xff08;Hypergraph&#xff09;**是普…...

OpenCV CUDA模块结构分析与形状描述符------计算指定阶数的矩(Moments)所需的总数量函数:numMoments

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于计算指定阶数的矩&#xff08;Moments&#xff09;所需的总数量。 在图像处理中&#xff0c;矩&#xff08;moments&#xff09;是一…...