当前位置: 首页 > news >正文

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[序号,光缆段落名&#xff08;A端…...

防火墙(ensp USG6000v)---安全策略 + 用户认证综合实验

一. 题目 1&#xff09; 拓扑 2&#xff09;要求 1. DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00 -- 18: 00)可以访问&#xff0c;生产区的设备全天可以访问 2.生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许…...

Java使用POI导出后数字类型为常规类型,不能计算

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

项目进度管理(5-1)常见的缓冲区监控方法

缓冲区监控是一种项目管理技术&#xff0c;主要用于关键链项目管理系统&#xff08;Critical Chain Project Management, CCPM&#xff09;中。它的核心理念是识别和管理项目中的不确定性和依赖性&#xff0c;以提高项目完成的可靠性。 缓冲区监控方法主要是针对项目进度计划执…...

构造函数语意学(The Semantics of Constructors)

1、“Default Constructor” 的构造操作 下面4种情况编译器会生成默认构造函数&#xff1a; 成员类对象带有默认构造函数父类带有默认构造函数带有虚表的类带有虚基类的类 1.1、 成员类对象带有默认构造函数 如果一个类没有任何构造函数&#xff0c;但它的一个成员对象带有…...

香橙派5plus上跑云手机方案二 waydroid

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

600Kg大载重起飞重量多旋翼无人机技术详解

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

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&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.代码实现&#xff1a; //3.反转链表 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int …...

网桥与以太网交换机:功能与区别解析

在传统的共享式局域网中&#xff0c;所有站点共享一个公共的传输媒体。随着局域网规模的扩大、网络中站点数目的不断增加&#xff0c;这样的网络通信负载加重&#xff0c;网络效率急剧下降。随着技术的发展、交换技术的成熟和成本的降低&#xff0c;具有更高性能的交换式局域网…...

动态引用的艺术:在Postman中实现自动化的终极指南

&#x1f300; 动态引用的艺术&#xff1a;在Postman中实现自动化的终极指南 在API开发和测试中&#xff0c;Postman是一个强大的工具&#xff0c;它提供的动态引用功能可以帮助我们实现自动化和更高效的测试流程。本文将深入探讨如何在Postman中使用动态引用&#xff0c;通过…...

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介绍&#xff1a; 1.2 属性介绍&#xff1a; 1.3细节理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-网格布局&#xff1a; 3.1QGridLayout介绍&#xff1a; 3.2常用方法&#xff1a…...

图论---无向图中国邮路的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 程序流程图&#xff1a; 数学原理&#xff1a; 本质上是找到一条欧拉回路&#xff0c;考虑图中的边权重、顶点的度数以及如何通过添加最少的额外边来构造欧拉回路&#xff0c;涉及到欧…...

Rockchip RK3588 - Rockchip Linux SDK脚本分析

---------------------------------------------------------------------------------------------------------------------------- 开发板 &#xff1a;ArmSoM-Sige7开发板eMMC &#xff1a;64GBLPDDR4 &#xff1a;8GB 显示屏 &#xff1a;15.6英寸HDMI接口显示屏u-boot &a…...

【C++中resize和reserve的区别】

1. resize的用法 改变当前容器内含有元素的数量&#xff08;size()&#xff09;比如&#xff1a; vector<int> vct;int num vct.size();//之前的元素个数为num vct.resize(len);//现在的元素个数为len如果num < len &#xff0c;那么容器vct新增len - num个元素&am…...

计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

本论文的主要研究内容如下&#xff1a; 了解基于Spark的TapTap游戏数据分析系统的基本架构&#xff0c;掌握系统的开发方法&#xff0c;包括系统开发基本流程、开发环境的搭建、测试与运行等。 主要功能如下&#xff1a; &#xff08;1&#xff09;用户管理模块&#xff1a…...

Python面试题:如何在 Python 中进行正则表达式操作?

在 Python 中&#xff0c;正则表达式操作可以通过 re 模块来实现。以下是一些常用的正则表达式操作和示例&#xff1a; 1. 导入模块 import re2. 常见操作和示例 a. 匹配 使用 re.match() 来检查字符串的开头是否匹配某个模式。 pattern r\d # 匹配一个或多个数字 strin…...

C#面:简述什么是中间件(Middleware)?

中间件是组装到应⽤程序管道中以处理请求和响应的软件。 每个组件&#xff1a; 选择是否将请求传递给管道中的下⼀个组件。 可以在调⽤管道中的下⼀个组件之前和之后执⾏⼯作。 请求委托&#xff08;Request delegates&#xff09;⽤于构建请求管道&#xff0c;处理每个HTTP请…...

AWS Glue 与 Amazon Redshift 的安全通信配置

1. 引言 在 AWS 环境中,确保服务间的安全通信至关重要。本文将探讨 AWS Glue 与 Amazon Redshift 之间的安全通信配置,特别是为什么需要特定的安全组设置,以及如何正确实施这些配置。 2. 背景 AWS Glue:全托管的 ETL(提取、转换、加载)服务Amazon Redshift:快速、完全…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...