【办公类-19-02】20240122图书EXCEL插入列并删除空行

作品展示

背景需求

上次23个班级班主任统计图书,写在EXCEL内

【办公类-19-01】20240108图书统计登记表制作(23个班级)EXCEL复制表格并合并表格-CSDN博客文章浏览阅读693次,点赞12次,收藏7次。【办公类-19-01】20240108图书统计登记表制作(23个班级)EXCEL复制表格并合并表格https://blog.csdn.net/reasonsummer/article/details/135473511提交后

每个班级的图书数量不一致,

需求

1、删除多余的空行

2、在序号和书名中间加入“年级”“班级”

素材准备:

全部代码

'''
把每个EXCEL前面增加一列班级、一列年级。共生成25份
删除多余行
作者:阿夏
时间:2024年1月22日'''
from openpyxl import Workbook
from openpyxl.styles import Alignment
from openpyxl.styles import Border, Side
import openpyxl
from docx import Document
import os
from docx.enum.text import WD_BREAK# 换页符号
from docx.enum.section import WD_SECTION
from docx.shared import Pt,Inches, Cm
#导入模块xlrd
import xlrd
import openpyxl
# import pandas as pd
import os
import time
import win32com.client as win32imagePath=r'C:\Users\jg2yXRZ\OneDrive\桌面\图书'print('------------第1步:读取原始文件-------------')# 新建一个”装N份word和PDF“的临时文件夹
imagePath1=imagePath+r'\\02插入班级年级的班级图书'
if not os.path.exists(imagePath1):  # 判断存放图片的文件夹是否存在os.makedirs(imagePath1)  # 若图片文件夹不存在就创建# 指定要读取的文件夹路径
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\图书\01班主任提交的图书'
# 获取文件夹内所有文件名
file_names = os.listdir(folder_path)
# 拼接文件路径
doc_paths = [os.path.join(folder_path, file_name) for file_name in file_names]
print(doc_paths)
# ['C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大1班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大2班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大3班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大4班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大5班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大6班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\大7班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\小1班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\小2班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\小3班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌 
# 面\\图书\\所有图书\\小4班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\小5班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图 
# 书\\所有图书\\小6班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\小7班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所 
# 有图书\\托1班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\托2班班级图书汇总表.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\测试.xlsx', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\图书\\所有图书\\测试2.xlsx']print('------------第2步:每个EXCEL插入两列班级年级-------------')
# 遍历所有的EXCLE,添加班级列和年级列
for x  in range(len(doc_paths)):# 读取Excel文件workbook = openpyxl.load_workbook(r'{}'.format(doc_paths[x]))# 获取第一个工作表worksheet = workbook.worksheets[0]# 插入两列grade=['班级','年级']title=[]# 提取标题=班级cells=worksheet['A1']# 大1title1=cells.value[6:8]# 大班组title2=cells.value[6:7]+'班组'title.append(title1)title.append(title2)print(title)# 写入两列 班级和年级for i in range(len(grade)):# 在A列后插入一列B,并填写为"小1班"worksheet.insert_cols(2)# 在第2列前插入一列worksheet['B2']=grade[i]# 先插入班级,再插年级# 插入列的宽度worksheet.column_dimensions['B'].width = 10worksheet.column_dimensions['C'].width = 10# 获取行数row_count = worksheet.max_row    # 填写B列的单元格为"小1班"for row in range(3, row_count + 1):alignment = Alignment(horizontal='center')   worksheet.cell(row=row, column=2,value=title[i]).alignment = alignment# 获取活动工作表ws1 = workbook.active# 添加表格框线   假设你要设置的数据范围是第2行到第总行数+1行,第2列到第3列=第2列for col in ws1.iter_cols(min_row=3, max_row=row_count + 1, min_col=2, max_col=5):  # 注意:max_row应该是11,因为你要包括第10行for cell in col:cell.border = Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))# E列出版社和F列ISBN列宽变长         worksheet.column_dimensions['E'].width = 20worksheet.column_dimensions['F'].width = 20# 标签名字改成大1   ,不改就是“Sheet1”worksheet.title=title[0]# 删除“书名、出版社、ISDN”号三列都是空的行数,需要循环删除   # worksheet = workbook.activefor row in  worksheet.iter_rows(min_row=3, max_row= worksheet.max_row, min_col=4, max_col=6):    # 4=D# 因为删除一个空行后,行数上移,可能会跳过某些空行,所以最多循环350次,反复删除空行for y in range(365):            # 生成时间长# 检查D、E和F列的单元格是否都为空if all(cell.value is None for cell in row):# 如果都为空,删除整行worksheet.delete_rows(row[0].row)# 保存修改后的Excel文件workbook.save(imagePath+r'\\02插入班级年级的班级图书\新{}'.format(doc_paths[x][-15:]))workbook.close()print('------------第4步:将改过的新图书放在一张表里,保留原始格式-------------')# # 把整理里面的多个EXCEL工作表合并在一个工作表内N个工作簿、# print('---第3步:把23个工作簿合并1个工作簿的N个工作表-----')# a=r'C:\Users\jg2yXRZ\OneDrive\桌面\图书\各班填写后EXCEL.xlsx'
# print(a)# def merge_excel_files(path):
#     # create a new Excel workbook or open an existing one
#     excel = win32.gencache.EnsureDispatch('Excel.Application')
#     try:
#         wb = excel.Workbooks.Open(os.path.join(path, a))
#     except:
#         wb = excel.Workbooks.Add()#     # loop through all Excel files in the folder
#     for file in os.listdir(path):
#         print(file)
#         # 大5班班级图书汇总表.xlsx
#         if file.endswith('.xlsx'):            # open the Excel file打开EXCEL文件
#             ww=path+'\\'+file
#             print(ww)
#             wb_source = excel.Workbooks.Open(os.path.join(path, file))
#             print(wb_source)
#             # loop through all worksheets in the Excel file 所有文件内容
#             for sheet in wb_source.Worksheets:#                 # copy the worksheet to the destination workbook 复制表格内容到目标文件内,将其放到N工作表格后面
#                 sheet.Copy(After=wb.Sheets(wb.Sheets.Count))#             # close the source workbook 关闭来源文件
#             wb_source.Close()#     # save and close the destination workbook
#     wb.SaveAs(os.path.join(path, a))
#     wb.Close()
#     excel.Quit()#     # delete Sheet1 from 合并.xlsx
#     excel = win32.gencache.EnsureDispatch('Excel.Application')
#     wb = excel.Workbooks.Open(os.path.join(path, a))
#     ws = wb.Worksheets('Sheet1')
#     ws.Delete()
#     wb.Save()
#     wb.Close()
#     excel.Quit()# path = imagePath+r'\\02插入班级年级的班级图书'
# merge_excel_files(path)

终端演示:

最终成果

还没有研究出来如何将这么多工作表,合并在一张工作表的一个工作簿里,并保留原来的格式。

待续

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

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

相关文章

Unity 编辑器篇|(十三)自定义属性绘制器(PropertyDrawer ,PropertyAttribute) (全面总结 | 建议收藏)

目录 1. 前言2. PropertyDrawer2.1 参数总览2.2 两种用途2.3 注意事项2.4 代码样例 3. PropertyDrawer与PropertyAttribute结合使用 1. 前言 在Unity中,PropertyDrawer和PropertyAttribute是两个重要的工具,它们主要用于自定义属性的显示和行为。Proper…

如何查看其他电脑的MYSQL数据库 mysql查询另一个ip数据库

文章标签如何查看其他电脑的MYSQL数据库mysql数据库服务器MySQL文章分类MySQL数据库阅读数143 1.如何通过IP访问MySQL数据库 1.1 改表法1.2 授权法 2.MySQL数据库基本命令 2.1 基本命令2.2 注释2.3 关键字2.4 实践操作 3 小结 1.如何通过IP访问MySQL数据库 1.1 改表法 如…

三、安全工程—安全架构(CISSP)

目录 一、安全工程 1.企业安全架构与系统安全架构 2.通用企业架构框架 2.1 Zachman框架

【JS逆向学习】国家加密系列-SM算法实例

SM系列 1、国家加密算法介绍 事实上从 2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,其中SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。目…

Django框架二

一、模型层及ORM 1.模型层定义 负责跟数据库之间进行通信 2.Django配置mysql 安装mysqlclient,mysqlclient版本最好在13.13以上 pip3 install mysqlclient DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: "mysite1",USER:root,PASSWO…

pip安装之后还是无法使用问题处理

最近由于需要使用到Python 相关功能, 记录下一些入门小技巧 1 python 下载安装 在window10 环境下载免安装版本, 并解压 安装包下载地址: https://www.python.org/ftp/python/3.12.1/python-3.12.1-embed-amd64.zip 2. 安装pip, 由于是内嵌…

【立创EDA-PCB设计基础】5.布线设计规则设置

前言:本文详解布线前的设计规则设置。经过本专栏中的【立创EDA-PCB设计基础】前几节已经完成了布局,接下来开始进行布线,在布线之前,要设置设计规则。 目录 1.间距设置 1.1 安全间距设置 1.2 其它间距设置 2.物理设置 2.1 导…

Git生成公钥

一.配置本地用户名及邮箱 # 配置用户名 git config --global user.name "用户名" # 配置邮箱 git config --global user.email "邮箱地址"以上命令执行结束后,可用 git config --global --list 命令查看配置是否成功。 二.git生成公钥 在git…

力扣hot100 合并两个有序链表 递归 双指针

Problem: 21. 合并两个有序链表 文章目录 💖 递归思路 💖 双指针 💖 递归 思路 👨‍🏫 参考地址 n , m n,m n,m 分别为 list1 和 list2 的元素个数 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) 🌎 空间复杂…

是谁说网工这行是小众行业?我帮你搜了搜……

有人说网工这行是个小众行业,很多朋友在喊岗位不够多,我帮你搜了搜,其实招聘岗位的需求真的很多: 可能你换着搜索下关键词,善用不同类型的渠道,你会有新的惊喜。 能达到这要求的,这位朋友&#…

Halcon基于灰度值的模板匹配create_temple

Halcon基于灰度值的模板匹配 基于灰度值的模板匹配适用于图像内灰度变化比较稳定,噪声比较少,且灰度差异比较明显的检测目标。这是一种不太推的匹配方法,因为该方法复杂度高,一次只能检测一个目标,耗时,且…

线程池--JAVA

虽然线程是轻量级进程,但是如果当创建和销毁的的频率非常之高,那么它也就会消耗很多的资源。 而线程池就是用来优化线程频繁创建和销毁的场景,减少线程创建、销毁的频率。 ExecutorService JAVA标准库为我们实现了线程池,Execu…

华而有实,维乐Prevail Glide带你领略风景线,成为风景线~

大家都知道呢!骑行,不仅是一种运动,更是一种生活态度。在骑行装备的世界里,一个好的坐垫对于骑行的舒适度和安全性至关重要。那今天,我要为大家推荐一款备受赞誉的坐垫——维乐坐垫美学系列-Prevail Glide。    为…

基于springboot+vue的甘肃非物质文化网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

pycharm创建vue项目idealTree:npm: sill idealTree buildDeps,换taobao源后还不好使?那就再换一个

心血来潮打算写个小项目,前后端分离,flask/fastapivue(具体用哪个后端还没想好),里面的功能大概就是目前所有热门的应用的合集,一键出结果的那种,然后跟随着科技趋势,不断去更新维护…

CSGO搬砖项目还能火多久?

最近放假回到老家,见了不少亲戚朋友,大家不约而同都在感叹今年大环境不好,工作不顺,生意效益不好,公司状况不佳,反问我们生意如何?为了让他们心里好受一点,我也假装附和道:也不咋地&…

组件中写选项的顺序(vue的问题)

为什么选项要有统一的书写顺序呢?很简单,就是要将选择和认知成本最小化。 副作用 (触发组件外的影响) el全局感知 (要求组件以外的知识) nameparent组件类型 (更改组件的类型) functional模板修改器 (改变模板的编译方式) delimiterscomments模板依赖 (…

JavaScript DOM表单相关操作之表单相关事件

1、焦点事件 焦点事件就是鼠标的光标事件&#xff0c;点到输入框中&#xff0c;叫做获得焦点事件&#xff0c;当鼠标离开这个输入框时叫做失去焦点事件。 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>知数SEO_专注搜…

Rust 程序设计语言学习——基础语法

Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率&#xff0c;它的执行效率也是令人称赞的&#xff0c;是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发&#xff0c;最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apach…

Beego之Beego参数配置

1、beego参数配置 配置模块是基础模块之一&#xff0c;对不同类型的配置文件提供了一种抽象。 beego目前支持INI、XML、JSON、YAML格式的配置文件解析&#xff0c;但是默认采用了INI格式解析&#xff0c;用户可以通过简 单的配置就可以获得很大的灵活性。同时也支持以 etcd …