pandas+pywin32操作excel办公自动化
import pandas as pd
import re
import win32com.client as win32
from win32com.client import constants
import os
import os.path as osp
#读取表格
path=os.getcwd()
fp=osp.join(path,'fuck_demo.xlsx')
df=pd.read_excel(fp,header=1,usecols=['序号','光缆段落名(A端-B端)'],nrows=72)#别忘了nrows
df.set_index('序号',inplace=True)#设置索引
#筛选数据
df_1=df[~df['光缆段落名(A端-B端)'].str.contains('JT01')]
df_2=df[df['光缆段落名(A端-B端)'].str.contains('JT01')]
#操作引用df_2数据
reg=re.compile(r'(?<=\()(.*?)(?=\))')
pf=df_2.copy()
pf['提取A-B端']=pf['光缆段落名(A端-B端)'].str.extract(reg,expand=False)
pf['光缆芯数']=pf['光缆段落名(A端-B端)'].str.extract(r'(?:.*)(-\d+)',expand=False)
pf=pf.iloc[::-1]#倒序,关键
pf['光缆芯数'] = pf['光缆芯数'].replace('-', '', regex=True)#替换
#处理数据
ls=[]
for idx,row in pf.iterrows():
strs_2=row['光缆段落名(A端-B端)']
strs_3=row['提取A-B端']
strs_4=row['光缆芯数']
if strs_3 in strs_2:
ls.append([idx,strs_3,strs_4])
lg=[]#存放当前项与前一项相等,且与后一项不等
lf=[]#存放前后两项不等的
for i in range(len(ls)):
if ls[i][1]==ls[i-1][1] and ls[i][1]!=ls[i+1][1]:
lt=ls[i-1:i+2]
l1=[]#存放数字
l2=[]#存放A-B端
l3=[]#存放光缆芯数
for j in range(len(lt)):
l1.append(lt[j][0])
l2.append(lt[j][1])
l3.append(lt[j][-1])
new_l1=[min(l1),max(l1)]#取最小最大
new_l1=map(str,new_l1)#列表元素映射为字符串
new_l2=list(set(l2))+list(set(l3))
res_1='-'.join(new_l1)#序号拼接
res_2='-'.join(new_l2)#AB端光缆芯数拼接
res_3=list((res_1,res_2))#转为列表
lg.append(res_3)
else:
l1=ls[i][0]#存放数字
l2=ls[i][1]#存放A-B端
l3=ls[i][-1]#存放光缆芯数
res_4=list((l1,l2,l3))
lf.append(res_4)
xh=[]#序号
ab=[]#ab端
xs=[]#芯数
for k in range(len(lf)):
l1=lf[k][0]#存放数字
l2=lf[k][1]#存放A-B端
l3=lf[k][-1]#存放光缆芯数
xh.append(l1)
ab.append(l2)
xs.append(l3)
#重新两两分组
xh=[xh[x:x+2] for x in range(0,len(xh),2)]
ab=[ab[x:x+2] for x in range(0,len(ab),2)]
xs=[xs[x:x+2] for x in range(0,len(xs),2)]
lm=[]
for n in range(len(xh)):
l1=list((min(xh[n]),max(xh[n])))
new_l1=map(str,l1)
l2=list(set(xs[n]))
l3=ab[n]+l2
res_1='-'.join(new_l1)
res_2='-'.join(l3)
lm.append([res_1,res_2])
finall_list=lg+lm
#去重
finall_ls=[]
for l in finall_list:
if l not in finall_ls:
finall_ls.append(l)
#根据结果列表重新创建DataFrame
df_3=pd.DataFrame(data=finall_ls,columns=['序号','光缆段落名(A端-B端)'])
df_3.set_index('序号',drop=True,inplace=True)#设置序号列为索引
#把没有JT的光缆段落和经过处理的有JT的段落进行拼接
cf=pd.concat([df_1,df_3],axis=0)
'''
重新替换索引也行,不替换也行。反正行号是在序号的基础上+2
'''
#pywin32读取excel表格
#运行excel程序
try:
excel_app = win32.gencache.EnsureDispatch('Excel.Application')
except:
try:
win32.gencache.EnsureDispatch('et.Application')
except:
win32.gencache.EnsureDispatch('ket.Application')
finally:
excel_app.Visible = True
excel_app.DisplayAlerts = False
#读取表格所需列
workbook = excel_app.Workbooks.Open(fp)
worksheet = workbook.Worksheets('清单')
worksheet.Columns(3).Insert()
worksheet.Columns(4).Insert()
worksheet.Cells(2, 3).Value = '图纸编号'#设置列名
worksheet.Cells(2, 4).Value = '段落名称'#设置列名.
#操作表格
for idx,row in cf.iterrows():
dl=row['光缆段落名(A端-B端)']
bh=idx
if '-' in str(bh):
sb=bh.split('-')
start_row=int(min(sb))+2#开始行号
end_row=int(max(sb))+2#结束行号
range1_to_merge=worksheet.Range(worksheet.Cells(start_row, 3), worksheet.Cells(end_row, 3))#要合并的单元格的“图纸编号”
range2_to_merge=worksheet.Range(worksheet.Cells(start_row, 4), worksheet.Cells(end_row, 4))#要合并单元格的“段落名称”
range3_to_color=worksheet.Range(worksheet.Cells(start_row, 5), worksheet.Cells(end_row, 5))#要设置颜色的“光缆段落名(A端-B端)”
range4_to_color=worksheet.Range(worksheet.Cells(start_row, 17), worksheet.Cells(end_row, 17))#要设置颜色的“委托单号+需求人”
range2_to_merge.WrapText = True#自动换行
range3_to_color.Interior.Color =7396243 # 浅红色填充色804040
range4_to_color.Interior.Color =7396243
#range3_to_merge.Font.Color = 25500 # 深红色文本
range1_to_merge.Value=bh#图纸编号
range2_to_merge.Value=dl#光缆段落
range1_to_merge.Merge()
range2_to_merge.Merge()
range2_to_merge.Rows.RowHeight=36
range2_to_merge.Columns.ColumnWidth = 34
else:
worksheet.Cells(idx+2,3).Value = idx
worksheet.Cells(idx+2,4).Value = dl
worksheet.Cells(idx+2,4).WrapText = True#自动换行
#结束操作保存表格
workbook.Save()
workbook.Close(SaveChanges=False)
excel_app.Quit()
相关文章:
pandas+pywin32操作excel办公自动化
import pandas as pd import re import win32com.client as win32 from win32com.client import constants import os import os.path as osp #读取表格 pathos.getcwd() fposp.join(path,fuck_demo.xlsx) dfpd.read_excel(fp,header1,usecols[序号,光缆段落名(A端…...

防火墙(ensp USG6000v)---安全策略 + 用户认证综合实验
一. 题目 1) 拓扑 2)要求 1. DMZ区内的服务器,办公区仅能在办公时间内(9:00 -- 18: 00)可以访问,生产区的设备全天可以访问 2.生产区不允许访问互联网,办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许…...

Java使用POI导出后数字类型为常规类型,不能计算
今日日常撸码,甲方提出来excel导出后,数字类型那一列是常规类型,并不是数字,无法进行计算,如下图: 这里和导出的字段类型有关,我用的是POI进行excel的导出,需要在实体类上标注出需要…...

项目进度管理(5-1)常见的缓冲区监控方法
缓冲区监控是一种项目管理技术,主要用于关键链项目管理系统(Critical Chain Project Management, CCPM)中。它的核心理念是识别和管理项目中的不确定性和依赖性,以提高项目完成的可靠性。 缓冲区监控方法主要是针对项目进度计划执…...
构造函数语意学(The Semantics of Constructors)
1、“Default Constructor” 的构造操作 下面4种情况编译器会生成默认构造函数: 成员类对象带有默认构造函数父类带有默认构造函数带有虚表的类带有虚基类的类 1.1、 成员类对象带有默认构造函数 如果一个类没有任何构造函数,但它的一个成员对象带有…...

香橙派5plus上跑云手机方案二 waydroid
前言 上篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)说了怎么跑带GPU加速的redroid方案,这篇说下怎么在香橙派下使用Waydroid。 温馨提示 虽然能运行,但是体验下来只能用软件加速,无法使用GPU加速,所有会很卡。而且…...

600Kg大载重起飞重量多旋翼无人机技术详解
600Kg大载重起飞重量的多旋翼无人机是一种高性能的无人驾驶旋翼飞行器,具有出色的载重能力和稳定的飞行特性。该无人机采用先进的飞行控制系统和高效的动力系统,能够满足各种复杂任务的需求,广泛应用于物资运输、应急救援、森林防火等领域。 …...

LlamaFactory可视化微调大模型 - 参数详解
LlamaFactory 前言 LLaMA Factory 是一个用于微调大型语言模型的强大工具,特别是针对 LLaMA 系列模型。 可以适应不同的模型架构和大小。 支持多种微调技术,如全参数微调、LoRA( Low-Rank Adaptation )、QLoRA( Quantized LoRA )等。 还给我们提供了简单实用的命令行…...

最新 Kubernetes 集群部署 + flannel 网络插件(保姆级教程,最新 K8S 版本)
资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…...

C语言笔记31 •单链表经典算法OJ题-3.反转链表•
反转链表 1.问题 给你单链表的头节点 head,请你反转链表,并返回反转后的链表。 2.代码实现: //3.反转链表 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int …...

网桥与以太网交换机:功能与区别解析
在传统的共享式局域网中,所有站点共享一个公共的传输媒体。随着局域网规模的扩大、网络中站点数目的不断增加,这样的网络通信负载加重,网络效率急剧下降。随着技术的发展、交换技术的成熟和成本的降低,具有更高性能的交换式局域网…...
动态引用的艺术:在Postman中实现自动化的终极指南
🌀 动态引用的艺术:在Postman中实现自动化的终极指南 在API开发和测试中,Postman是一个强大的工具,它提供的动态引用功能可以帮助我们实现自动化和更高效的测试流程。本文将深入探讨如何在Postman中使用动态引用,通过…...

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)
目录 一、QVBoxLayout-垂直布局: 1.1QVBoxLayout介绍: 1.2 属性介绍: 1.3细节理解: 二、QHBoxLayout-水平布局: 三、QGridLayout-网格布局: 3.1QGridLayout介绍: 3.2常用方法:…...

图论---无向图中国邮路的实现
开始编程前分析设计思路和程序的整体的框架,以及作为数学问题的性质: 程序流程图: 数学原理: 本质上是找到一条欧拉回路,考虑图中的边权重、顶点的度数以及如何通过添加最少的额外边来构造欧拉回路,涉及到欧…...
Rockchip RK3588 - Rockchip Linux SDK脚本分析
---------------------------------------------------------------------------------------------------------------------------- 开发板 :ArmSoM-Sige7开发板eMMC :64GBLPDDR4 :8GB 显示屏 :15.6英寸HDMI接口显示屏u-boot &a…...
【C++中resize和reserve的区别】
1. resize的用法 改变当前容器内含有元素的数量(size())比如: vector<int> vct;int num vct.size();//之前的元素个数为num vct.resize(len);//现在的元素个数为len如果num < len ,那么容器vct新增len - num个元素&am…...

计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
本论文的主要研究内容如下: 了解基于Spark的TapTap游戏数据分析系统的基本架构,掌握系统的开发方法,包括系统开发基本流程、开发环境的搭建、测试与运行等。 主要功能如下: (1)用户管理模块:…...
Python面试题:如何在 Python 中进行正则表达式操作?
在 Python 中,正则表达式操作可以通过 re 模块来实现。以下是一些常用的正则表达式操作和示例: 1. 导入模块 import re2. 常见操作和示例 a. 匹配 使用 re.match() 来检查字符串的开头是否匹配某个模式。 pattern r\d # 匹配一个或多个数字 strin…...
C#面:简述什么是中间件(Middleware)?
中间件是组装到应⽤程序管道中以处理请求和响应的软件。 每个组件: 选择是否将请求传递给管道中的下⼀个组件。 可以在调⽤管道中的下⼀个组件之前和之后执⾏⼯作。 请求委托(Request delegates)⽤于构建请求管道,处理每个HTTP请…...
AWS Glue 与 Amazon Redshift 的安全通信配置
1. 引言 在 AWS 环境中,确保服务间的安全通信至关重要。本文将探讨 AWS Glue 与 Amazon Redshift 之间的安全通信配置,特别是为什么需要特定的安全组设置,以及如何正确实施这些配置。 2. 背景 AWS Glue:全托管的 ETL(提取、转换、加载)服务Amazon Redshift:快速、完全…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...