【办公类-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 win32

imagePath=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']
    # 大1
    title1=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 = 10
        worksheet.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 = 20
    worksheet.column_dimensions['F'].width = 20
   
   # 标签名字改成大1   ,不改就是“Sheet1”
    worksheet.title=title[0]

    # 删除“书名、出版社、ISDN”号三列都是空的行数,需要循环删除   
    # worksheet = workbook.active
    for 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)
    

终端演示:

最终成果

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

待续

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webrtc线程代码研究

webrtc线程类的实现集成了socket的收发,消息队列,值得研究,基于webrtc75版本。 主要类介绍 Thread类 虚线:继承 实线:调用 橙色:接口 Thread继承MessageQueueThread提供两个静态方法,分别用来创建带socke…

Asp.net core 框架入门

概述 appsettings.json:配置文件,数据库连接字符串配置信息 Program.cs:程序入口文件(里面有个Main方法) Startup.cs:启动配置文件 依赖项:管理项目所依赖的第三方组件的安装,配…

数字图像处理(实践篇)二十六 使用cvlib进行人脸检测、性别检测和目标检测

目录 1 安装cvlib 2 涉及的函数 3 实践 4 其他 cvlib一个简单,高级,易于使用的开源Python计算机视觉库。 1 安装cvlib # 安装依赖pip install opencv-python tensorflow# 安装cvlibpip install cvlib</

你不知道的git如何撤销回退版本

简言之&#xff1a;从1 回退到 3&#xff0c;在3版本通过回退记录(git reflog)找到它的上一条回退记录的hash值&#xff0c;复制1的hash值进行回退&#xff0c;执行git reset --hard 粘贴1的hash值进来&#xff0c;此时就回到1的版本了&#xff0c;执行git log即可看到1、2、3、…

HCIA——25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

Oracle 高级网络压缩 白皮书

英文版白皮书在这里 或 这里。 本文包括了对英文白皮书的翻译&#xff0c;和我觉得较重要的要点总结。 执行概述 Oracle Database 12 引入了一项新功能&#xff1a;高级网络压缩&#xff0c;作为高级压缩选项的一部分。 本文概述了高级网络压缩、其优点、配置细节和性能分析…

C# 线程本地存储 为什么线程间值不一样

一&#xff1a;背景 1. 讲故事 有朋友在微信里面问我&#xff0c;为什么用 ThreadStatic 标记的字段&#xff0c;只有第一个线程拿到了初始值&#xff0c;其他线程都是默认值&#xff0c;让我能不能帮他解答一下&#xff0c;尼玛&#xff0c;我也不是神仙什么都懂&#xff0c…

Dockerfile中CMD命令的用法,你了解几个?

文章目录 1.问题描述2.解决方法3.问题原因分析4.CMD常见的用法4.1 执行应用程序4.2 使用 Shell 执行命令4.3 定义环境变量 5.最佳实践 1.问题描述 今天在进行业务调试时, 发现调试的java应用所在的容器无限重启&#xff0c;经过排查发现问题出在Dockerfile 文件中的CMD命令上&…

设计模式下

一、代理模式 一、概念 代理模式就是给一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引 用。它使得客户不能直接与真正的目标对象通信。代理对象是目标对象的代表&#xff0c; 其他需要与这个目标对象打交道的操作都是和这个代理对象在交涉。 例如&#xff1a;去…

安装 nvm

前言&#xff1a; nvm 即 node 版本管理工具 (node version manager)&#xff0c;好处是方便切换 node.js 版本。 通过将多个 node 版本安装在指定路径&#xff0c;然后通过 nvm 命令切换时&#xff0c;就会切换我们环境变量中 node 命令指定的实际执行的软件路径。 使用场景…

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题&#xff0c;也是我很讨厌回答的问题&#xff0c;因为要想回答这个问题需要知道上下文。什么样式的元素&#xff0c;有哪些属性&#xff0c;是否有表单嵌套&#xff0c;都尝试了哪些定位方法。。。而且没几个提问者能事先详细的说明这些。哪儿像提bu…

宠物互联网医院系统:数字化呵护你爱宠的新时代

宠物互联网医院系统正在为宠物主人提供一种前所未有的数字化健康护理体验。通过结合创新技术&#xff0c;这一系统旨在让宠物医疗变得更加便捷、智能和个性化。让我们深入探讨宠物互联网医院系统的技术核心&#xff0c;以及如何应用代码为你的爱宠提供最佳关怀。 1. 远程医疗…

操作系统-进程控制(如何实现进程控制 如何实现原子性 相关进程控制原语)

文章目录 什么是进程控制总览如何实现进程控制&#xff1f;如何实现原语的“原子性”&#xff1f;进程控制相关的原语创建原语撤销原语子进程与父进程阻塞与唤醒原语切换原语 小结 什么是进程控制 控制进程的状态变换 总览 如何实现进程控制&#xff1f; 原语实现 假设不是原…

离线直线度测量仪的三种类型

智能型离线直线度测径仪主要用于金属棒材、管材、陶瓷管材等产品在生产节拍时间充裕时的直径和直线度检测。测量方便&#xff0c;自动将检测数据显示于显示屏上。 离线直线度测量仪使用前&#xff0c;设置产品规格&#xff0c;在更换轧材规格时&#xff0c;在设置一次&#xff…

强化学习:MuJoCo机器人强化学习仿真入门(1)

声明&#xff1a;我们跳过mujoco环境的搭建&#xff0c;搭建环境不难&#xff0c;可自行百度 下面开始进入正题&#xff08;需要有一定的python基础与xml基础&#xff09;&#xff1a; 下面进入到建立机器人模型的部分&#xff1a; 需要先介绍URDF模型文件和导出MJCF格式 介绍完…

【MATLAB源码-第123期】基于matlab的SSK(空间位移键控)调制和QSSK(正交空间位移键控)调制误码率对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. SSK&#xff08;空间位移键控&#xff09;&#xff1a; - 基本原理&#xff1a;SSK是一种MIMO&#xff08;多输入多输出&#xff09;系统中的调制技术。它通过选择性地激活不同的发送天线来传输信息。在每个时间槽&…

第十三回 赤发鬼醉卧灵官殿 晁天王认义东溪村-FreeBSD 下编辑文件ee 用法

话说雷横绑了一个大汉&#xff0c;先押到晁保正庄上讨些点心吃。这东溪村的保正叫晁盖&#xff0c;人称他托塔天王。晁盖热情接待了雷横和士兵们&#xff0c;自己却趁着他们喝酒的时候尿遁去看那大汉。原来那大汉就是来找晁保正的&#xff0c;于是谎称他是晁盖的外甥&#xff0…

【K8S 云原生】K8S的包包管理器-helm

目录 一、helm概念 1、什么是helm 2、helm的概念&#xff1a; 二、实验部署&#xff1a; 1、安装helm&#xff1a; 2、对chart仓库的基本使用&#xff1a; 2.1、查看和更新chart仓库 2.2、安装chart 2.3、卸载chart&#xff1a; 3、helm自定义模版&#xff1a; 3.1、…

【Linux】【实战系列】10 分钟掌握日常开发中 Linux 网络处理相关命令

文章目录 lsofnetstatpingnslookupsshssh-keygenscpsftp 网络工具 curl网络工具 wget最后个人简介 hello&#xff0c;大家好&#xff0c;我是 Lorin&#xff0c;上一期和大家分享一期日常开发中常用的 Linux 文件和文本命令实战教学&#xff0c;这一期给大家带来常用的网络处理…

k8s部署Ingress

前提&#xff1a;有自备的域名&#xff0c;没有域名可用主机配置的域名解析代替测试 #主机配置的域名 vi /etc/hosts #追加以下内容 127.0.0.1 kuboard1、部署Ingress vi deploy.yaml #输入以下内容apiVersion: v1 kind: Namespace metadata:labels:app.kubernetes.io/instan…