【办公类-48-03】20240930每月电子屏台账汇总成docx-3(三园区合并EXCLE,批量生成3份word)

背景需求:

前期电子屏汇总是“总园”用“”问卷星”、“一分园”用“腾讯文档”,二分园“用“手写word””

【办公类-48-02】20240407每月电子屏台账汇总成docx-2(腾讯文档xlsx导入docx,每页20条)【办公类-48-02】20240407每月电子屏台账汇总成docx-2(腾讯文档xlsx导入docx,每页20条)-CSDN博客文章浏览阅读537次,点赞8次,收藏4次。【办公类-48-02】20240407每月电子屏台账汇总成docx-2(腾讯文档xlsx导入docx,每页20条)_电子屏台账https://blog.csdn.net/reasonsummer/article/details/137453629【办公类-48-02】20240407每月电子屏台账汇总成docx-2(腾讯文档xlsx导入docx,每页20条)

【办公类-48-01】20240404每月电子屏台账汇总成docx-1(问卷星xlsx导入docx,每页20条)_led管理台账-CSDN博客文章浏览阅读466次,点赞8次,收藏8次。【办公类-48-01】20240404每月电子屏台账汇总成docx-1(问卷星xlsx导入docx,每页20条)_led管理台账https://blog.csdn.net/reasonsummer/article/details/137357133

本学期我让三个园区负责人都统一用一个“问卷星”

今天是9月最后一天,我要用代码做汇总了。

因为三个园区合并了,所以重新复制一个文件夹

问卷星下载EXCEL放在2024年09月里

三个园区的内容都在一个表里

代码展示

'''
电子屏台账2024年9月,docx,每页20条(三个园区汇总)
作者:AI对话大师
时间:2024年9月30日
问卷星下载时文本Excel
'''print('----1、读取EXCEL内容并合并成关键列表------')month=int(input('几月?\n'))
garden=['总园','一分园','二分园']import os
import pandas as pd
path= r'C:\Users\jg2yXRZ\OneDrive\桌面\电子屏每月2024'folder_path = path+fr'\2024年{month:02d}月'
file_name = '279855026_按文本_XXXXXXXXX重点部位电子屏、播控系统_83_83.xlsx'
file_path = os.path.join(folder_path, file_name)# 按行读取
df = pd.read_excel(file_path)
rows = df.iloc[:, 6:22].values.tolist()  # G列到W列的数据,按行转换为列表
# 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=7print(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)} 在范围 20-40 内")kong = 40 - len(nested_lists)print(kong)Y = 1# 判断多页情况下,最后一页是否能够凑满20行,凑不满,补空else: for z in range(20, 220, 20):if z <= len(nested_lists) < z + 20: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] * kongprint(v)# 把实际的填写内容+补充的空格,凑满20的倍数页nested_lists=nested_lists+vprint(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)# 22print("列数:", 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_path + fr'\2024年{month}月({garden[x]})电子屏台账.docx' # 输出文件路径output_file1 = folder_path + fr'\2024年{month}月({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)

运行输入:输入月份

总园26条,2页 

一分园41条,3页

二分园15条,1页

第一次遇到上报数量不满20条的情况,代码产生过报错

IndexError: list index out of range

后来为不足1页的情况添补了可能性。

最后顺利都运行出来了。

今天花了1小时调整原来的“电子屏台账生成代码”,就可以每月最后一天都快速批量生成三个园区的电子屏了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/436747.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云新开端口

检查防火墙设置 890 2024-09-30 20:47:18 netstat -tuln | grep 1213891 2024-09-30 20:47:49 ping 110.40.130.231892 2024-09-30 20:48:38 sudo firewall-cmd --zonepublic --add-port1213/tcp --permanent893 2024-09-30 20:48:51 sudo firewall-cmd --reload894 2024-…

汽车线束之故障诊断方案-TDR测试

当前&#xff0c;在汽车布局中的线束的性能要求越来越高。无法通过简单的通断测试就能满足性能传输要求。早起对智能化要求不高&#xff0c;比如没有激动雷达、高清摄像、中央CPU等。 近几年的智能驾驶对网络传输要求越来越高&#xff0c;不但是高速率&#xff0c;还需要高稳定…

常见的RTSP播放器有哪些?

VLC播放器 特点&#xff1a;VLC 是一款功能强大、跨平台的多媒体播放器&#xff0c;支持多种音频和视频格式以及流媒体协议&#xff0c;包括 RTSP。它具有广泛的解码器支持&#xff0c;能播放大多数常见的视频和音频格式。其开源特性使得它拥有活跃的开发者社区&#xff0c;不断…

HCIP--以太网交换安全(一)

目录 端口隔离 MAC地址表安全 以太网交换安全概述&#xff1a;以太网交换安全是一系列技术和策略的集合&#xff0c;旨在保护以太网交换机免受各种网络攻击和威胁。 端口隔离 一、端口隔离概述&#xff1a; 作用&#xff1a;可以实现同一个VLAN内端口的隔离 优势&#xff1a…

modelsim仿真 wave视图里 数据位宽和进制怎么显示

在modelsim 某些版本安装后&#xff0c;如ModelSim SE-64 2020.4版本&#xff0c;重置布局等情况下&#xff0c; 解决方案其实很简单&#xff1a; 点击中间的按钮 在Wave Windows Preferences 勾选Display-Show Radix Base -> Waveforms

Lj视频下载器 1.1.37 简洁高效的视频下载工具

Lj视频下载器是一个功能强大的视频下载器&#xff0c;支持直接添加视频地址或 m3u8 资源地址&#xff0c;可以从网页中自动提取视频进行下载。支持多种视频格式&#xff0c;包括 m3u8&#xff0c;并能自动检测并移除广告片段。 大小&#xff1a;19M 百度网盘&#xff1a;https…

音悦 1.5.1 完全免费,无广告,纯净听歌体验

音悦是一款完全免费的听歌应用&#xff0c;汇聚全网多平台曲库&#xff0c;拥有排行榜、MV、个性电台、我的歌单、收藏喜欢等功能。无需会员&#xff0c;没有广告&#xff0c;免费听歌下歌&#xff0c;是一款非常纯净小巧但功能齐全的听歌神器。 大小&#xff1a;27.6M 百度网…

YOLOv11尝鲜测试五分钟极简配置

ultralytics团队在最近又推出了YOLOv11&#xff0c;不知道在有生之年能不能看到YOLOv100呢哈哈。 根据官方文档&#xff0c;在 Python>3.8并且PyTorch>1.8的环境下即可安装YOLOv11&#xff0c;因此之前YOLOv8的环境是可以直接用的。 安装YOLOv11&#xff1a; pip instal…

yum使用阿里云的镜像源报错 Failed connect to mirrors.aliyuncs.com:80; Connection refused“

报错&#xff1a;Failed connect to mirrors.aliyuncs.com:80; Connection refused"&#xff0c;如果单独只是这个报错的话&#xff0c;那么原因是由于非阿里云ECS用户无法解析主机“mirrors.cloud.aliyuncs.com”。如果不单单只是这个报错另外还有其它报错请参考我其它文…

Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)

Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库&#xff0c;基于Key/Value结构存储数据&#xff0c;通常用来 缓解高并发场景下对某一资源的频繁请求 &#xff0c;减轻数据库的压力。它支持多种数据类型,如字符串、…

YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

一、本文介绍 本文记录的是改进YOLOv11的损失函数&#xff0c;将其替换成Shape-IoU。现有边界框回归方法通常考虑真实GT&#xff08;Ground Truth&#xff09;框与预测框之间的几何关系&#xff0c;通过边界框的相对位置和形状计算损失&#xff0c;但忽略了边界框本身的形状和…

IDEA几大常用AI插件

文章目录 前言列表GPT中文版TalkXBito AIIDEA自带的AI 前言 最近AI、GPT特别火&#xff0c;IDEA里面又有一堆插件支持GPT&#xff0c;所以做个专题比较一下各个GPT插件 列表 先看idea的plugins里支持哪些&#xff0c;搜索“GPT”之后得到的&#xff0c;我用下来感觉第一第二和…

[网络]抓包工具介绍 tcpdump

一、tcpdump tcpdump是一款基于命令行的网络抓包工具&#xff0c;可以捕获并分析传输到和从网络接口流入和流出的数据包。 1.1 安装 tcpdump 通常已经预装在大多数 Linux 发行版中。如果没有安装&#xff0c;可以使用包管理器 进行安装。例如 Ubuntu&#xff0c;可以使用以下…

【AI】深度学习的数学--核心公式

1 梯度下降 f ( x Δ x , y Δ y ) ≃ f ( x , y ) ∂ f ( x , y ) ∂ x Δ x ∂ f ( x , y ) ∂ y Δ y f(x\Delta x,y\Delta y) \simeq f(x,y)\frac{\partial f(x,y)}{\partial x}\Delta x\frac{\partial f(x,y)}{\partial y}\Delta y f(xΔx,yΔy)≃f(x,y)∂x∂f(x,y)​…

动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络

3.1 线性回归 线性回归是对n维输入的加权&#xff0c;外加偏差 线性回归可以看作是单层神经网络 回归问题中最常用的损失函数是平方误差函数。 平方误差可以定义为以下公式&#xff1a; 常数1/2不会带来本质的差别&#xff0c;但这样在形式上稍微简单一些 &#xff08;因为当…

叶绿素透射反射率与波长

本文在分析巢湖水体反射光谱特征的基础上,通过对光谱反射率与叶绿素a 的浓度之间的关系进行分析研究,结果表明,单波段光谱反射率与叶绿素a浓度的相关系数较小,不宜用于估算叶绿素a浓度&#xff0e;光谱反射率比值RFo5.m/Rss.nm.和 690nm反射率的一阶微分均与叶绿素a浓度有较好的…

idea2023-快速搭建一个本地tomcat的javaWeb项目(从0到1保姆教学)

前言 如何在新版idea中搭建一个javaWeb项目&#xff0c;并且应用在物理的tomcat中&#xff0c;本文将进行从零到一&#xff0c;完成搭建步骤&#xff0c;以及相关注意事项的讲解。 为什么需要配置tomcat&#xff1f; 我们开发的javaWeb项目&#xff0c;最后都需要打包部署到真正…

C++基础---类和对象(上)

1.类的定义 C程序设计允许程序员使用类&#xff08;class&#xff09;定义特定程序中的数据类型。这些数据类型的实例被称为对象 &#xff0c;这些实例可以包含程序员定义的成员变量、常量、成员函数&#xff0c;以及重载的运算符。语法上&#xff0c;类似C中结构体&#xff0…

【网络篇】计算机网络基础知识详述(1)(笔记)

目录 一、因特网基础认识 1. 初识因特网 2. 网络服务 3. 网络协议 4. 网络边缘 5. 物理链路 &#xff08;1&#xff09;双绞铜线 &#xff08;2&#xff09;同轴电缆 &#xff08;3&#xff09;光纤 6. 网络的网络&#xff08;因特网&#xff09; 二、网络核心 1. …