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

article/2025/6/8 8:05:46

背景需求:

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月文件夹内。

最后效果


http://www.hkcw.cn/article/yMOkumCbKa.shtml

相关文章

25年宁德时代新能源科技SHL 测评语言理解数字推理Verify题库

宁德时代新能源科技的SHL测评中&#xff0c;语言理解部分主要考察阅读理解、逻辑填空和语句排序等题型&#xff0c;要求应聘者在17分钟内完成30题。阅读理解需要快速捕捉文章主旨和理解细节信息&#xff1b;逻辑填空则要根据语句逻辑填入最合适的词汇&#xff1b;语句排序是将打…

Windows下WSL(Ubuntu)安装1Panel

1Panel 1Panel 提供了一个直观的 Web 界面和 MCP Server&#xff0c;帮助用户轻松管理 Linux 服务器中的网站、文件、容器、数据库以及大型语言模型&#xff08;LLMs&#xff09;。 官网地址&#xff1a;1Panel - 现代化、开源的 Linux 服务器运维管理面板 - 官网 前置条件 …

virtualbox安装扩展工具以支持共享文件夹

1.下载扩展镜像 https://download.virtualbox.org/virtualbox/7.0.16/ 2.加载扩展镜像并安装 3. 配置共享文件夹

实现仿中国婚博会微信小程序

主要功能&#xff1a; 1、完成底部标签导航设计、首页海报轮播效果设计和宫格导航设计&#xff0c;如图1所示 2、在首页里&#xff0c;单击全部分类宫格导航的时候&#xff0c;会进入到全部分类导航界面&#xff0c;把婚博会相关内容的导航集成到一个界面里&#xff0c;如图2…

Meta ASC广告:智能电商营销利器解析

Meta推出的ASC广告&#xff08;全称Advantage Shopping Campaign&#xff09;是专为电商卖家打造的智能营销利器。作为新一代自动化购物广告解决方案&#xff0c;它通过AI技术重塑了传统广告投放模式&#xff0c;为商家带来更高效的转化路径。 五大核心优势解析&#xff1a; 全…

1.1Nodejs和浏览器中的二进制处理

Buffer 在 Node.js 中&#xff0c;Buffer 类用于处理二进制数据。由于 JavaScript 在浏览器环境中主要用于处理字符串和数字等类型的数据&#xff0c;对二进制数据的处理能力较弱&#xff0c;因此 Node.js 引入了 Buffer 类来弥补这一不足&#xff0c;特别是在处理文件系统操作…

redis的哨兵模式和Redis cluster

目录 一. redis的主从复制 二. 哨兵模式 2.1 定义 2.2 作用 2.3 配置实例 三. Redis cluster 3.1 定义 3.2 作用 3.3 配置实例 1. 新建集群文件目录 2. 准备可执行文件到每个文件夹 3. 开启群集功能 4. 启动redis节点 5. 查看是否启动成功 6. 启动集群 7. 测试…

[Java 基础]打印金字塔

实现一个 Java 程序&#xff0c;让用户输入金字塔的层数&#xff0c;打印出对应层数的金字塔。 比如&#xff0c;如果用户指定金字塔的层数是 5&#xff0c;那么将会打印如下的金字塔&#xff1a; 0000* 000*** 00***** 0******* 假如 i 代表的是行&#xff0c;i 从 1 开始…

ollama的安装及加速下载技巧

下载ollama ollama的安装可以从官网下载&#xff0c;地址&#xff1a; https://ollama.com 但是下载会很慢&#xff0c;我是去的这里下载&#xff1a;https://www.gy328.com/app/ollama/ 和官网一样。 下载好了&#xff0c;点击安装&#xff0c;安装好了&#xff…

Qiskit:量子计算模拟器

参考文献&#xff1a; IBM Qiskit 官网Qiskit DocumentationQiskit Benchpress packageQiskit Algorithms package量子计算&#xff1a;基本概念常见的几类矩阵&#xff08;正交矩阵、酉矩阵、正规矩阵等&#xff09;Qiskit 安装指南-博客园使用Python实现量子电路模拟&#x…

05 APP 自动化- Appium 单点触控 多点触控

文章目录 一、单点触控查看指针的指针位置实现手势密码&#xff1a; 二、多点触控 一、单点触控 查看指针的指针位置 方便查看手势密码-九宫格每个点的坐标 实现手势密码&#xff1a; 执行手势操作&#xff1a; 按压起点 -> 移动到下一点 -> 依次移动 -> 释放&am…

aardio 图像识别

今天终于学会了编程中的 OCR 技术&#xff01;原来计算机真的能识别图片里的文字&#xff0c;这种让程序 "看懂" 图像的能力太神奇了&#xff0c;赶紧把学习过程记录下来。 一、初识OCR&#xff1a;让程序读懂图片文字 &#xff08;一&#xff09;简单识别实验 OC…

【北邮 操作系统】第十二章 文件系统实现

一、文件的物理结构 1.1 文件块、磁盘块 类似于内存分页&#xff0c;磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中&#xff0c;磁盘块的大小与内存块、页面的大小相同 内存与磁盘之间的数据交换(即读/写操作、磁盘I/0)都是以“块”为单位进行的。即…

VS2022下C++ Boost库安装与使用使用

一.Boost概述 1.简介 Boost 是一个广泛使用的 C 库集合&#xff0c;提供了许多高质量、可移植、高效的工具和组件&#xff0c;被视为 C 标准库的延伸。自 1998 年成立以来&#xff0c;Boost 已成为 C 社区的核心资源&#xff0c;许多 Boost 库通过实践验证后被纳入 C 标准&am…

Unity-UI组件详解

今天我们来学习Unity的UI的详解&#xff0c;这部分的内容相对较少&#xff0c;对于程序员来说主要的工作是负责将各种格式的图片呈现在显示器上并允许操作这些图片。 本篇帖子的理论依据依然是官方开源的UGUI代码&#xff0c;网址为&#xff1a;GitHub - Unity-Technologies/u…

化工厂爆炸事件看制造业AI转型

一、事件警示&#xff1a;化工制造安全风险不容忽视 近日&#xff0c;某化学有限公司发生事故。涉事工厂主体工程建设有2座硝化装置区&#xff0c;1座加氢装置区&#xff0c;均属于危险工艺生产装置。硝化反应通常属于强放热反应&#xff0c;原料及产物具有爆炸危险性&#xf…

Ubuntu系统安装与配置NTP时间同步服务

Ubuntu系统安装与配置NTP时间同步服务 一、NTP服务介绍NTP服务简介工作原理系统环境准备检查当前时间状态二、方案选择:systemd-timesyncd vs ntpd三、使用systemd-timesyncd时间同步1. 方案介绍2. 配置优化3. 应用配置4. 验证状态5. 检查当前时间状态6. 查看当前实践四、使用…

【小红书】API接口,获取笔记核心数据

小红书笔记核心数据API接口详解 - 深圳小于科技提供专业数据服务 深圳小于科技&#xff08;官网&#xff1a;https://www.szlessthan.com&#xff09;推出的小红书笔记核心数据API接口&#xff0c;为开发者提供精准的笔记互动数据分析能力&#xff0c;助力内容运营与商业决策。…

ElasticStack技术之logstash介绍

一、什么是Logstash Logstash 是 Elastic Stack&#xff08;ELK Stack&#xff09;中的一个开源数据处理管道工具&#xff0c;主要用于收集、解析、过滤和传输数据。它支持多种输入源&#xff0c;如文件、网络、数据库等&#xff0c;能够灵活地对数据进行处理&#xff0c;比如…

InternLM2/LM2.5/ViT/VL1.5/VL2.0笔记: 核心点解析

00 前言 本文主要是记录一下关于多模态大模型InternLM/InternVL系列的一些要点的理解。还是那句话&#xff0c;好记性&#xff0c;不如烂笔头。本文当成个人笔记用&#xff0c;行文风格和先前写的LLaVA系列一致。本文的重点是讲解多模态模型InternVL 1.5&#xff0c;但是Intern…