当前位置: 首页 > 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:快速、完全…...

嵌入式软件开发规范与最佳实践指南

嵌入式软件开发最佳实践指南1. 项目概述1.1 嵌入式开发核心挑战现代嵌入式系统开发面临代码复杂度增加、团队协作需求提升以及产品迭代周期缩短等多重挑战。高效的开发流程和规范的编码实践成为保证项目成功的关键因素。1.2 开发环境配置建议推荐采用以下硬件配置方案&#xff…...

TI C2000 DSP新手必看:用CCS建第一个工程时,如何避免头文件找不到的坑?

TI C2000 DSP开发避坑指南&#xff1a;从零构建CCS工程的正确姿势 第一次打开Code Composer Studio(CCS)时&#xff0c;那个充满按钮和菜单的界面就像面对一架航天飞机的控制台——每个开关都看起来很重要&#xff0c;但完全不知道从哪下手。特别是当你在教程指导下创建了第一个…...

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十七):Boot 3 → Boot 4 迁移避坑指南——那些文档不会告诉你的迁移血泪史

系列导航 | ← 上一篇:D16 Spring Boot 4 + AI推理后端集成 | 下一篇:D18 云原生部署:Docker + K8s + GraalVM → 适用读者:正在从 Spring Boot 3.x 升级到 4.x 的开发者,或在评估升级可行性的架构师。 前置知识:熟悉 Spring Boot 3.x 开发,了解 JDK 21+ 基本特性。 本文…...

超实用的三角高程观测记录及平差计算表格程序

三角高程观测记录及平差计算表格程序:通过给出的高程点的坐标&#xff08;边长&#xff09;和高程&#xff0c;只要填写点号&#xff0c;就能实现自动反向计算测量过程&#xff0c;并自动生成四个测回的观测记录。 非常实用方便&#xff0c;表格界面简洁&#xff0c;通用&#…...

立知-lychee-rerank-mm效果展示:文本+图像联合匹配惊艳案例集

立知-lychee-rerank-mm效果展示&#xff1a;文本图像联合匹配惊艳案例集 1. 多模态重排序新体验 想象一下这样的场景&#xff1a;你在电商平台搜索"白色猫咪玩毛线球"&#xff0c;系统返回了20个结果&#xff0c;有纯文字描述、有商品图片、还有图文混合的内容。传…...

全流程自动化知识图谱构建:从非结构化数据到智能决策支持

全流程自动化知识图谱构建&#xff1a;从非结构化数据到智能决策支持 【免费下载链接】llm-graph-builder Neo4j graph construction from unstructured data 项目地址: https://gitcode.com/GitHub_Trending/ll/llm-graph-builder 在信息爆炸的时代&#xff0c;企业如何…...

AI专著生成新方法:借助工具,轻松搞定学术专著撰写

撰写学术专著&#xff0c;研究者们通常面临着如何在“内容深度”与“覆盖广度”之间取得平衡的挑战。这种平衡往往成为了许多学者的一大难题。从内容深度的角度看&#xff0c;专著的核心思想应该具备足够的学术分量&#xff0c;除了要清晰表述“是什么”&#xff0c;更需深入探…...

实测AWS Bedrock 接入 Claude 4.6 做代码审查:200K 上下文+多智能体协作

最近 GitHub 上的不少热门开源项目都在热议一款新工具&#xff1a;Anthropic 刚刚在 AWS Bedrock 推出的 Claude 4.6 Sonnet&#xff0c;以及随之而来的多智能体代码审查系统&#xff08;Claude Code Review&#xff09;。这套系统不仅卷起了技术圈的讨论热潮&#xff0c;也掀起…...

页游党必看!传奇、篮球、策略全都有,点击即玩

对于喜欢玩网页游戏的朋友来说&#xff0c;找一个靠谱、福利多、游戏全的平台太重要了&#xff01;不用下载、点击即玩&#xff0c;还能安心挂机不担心跑路&#xff0c;这样的平台才是真刚需&#xff5e; 今天就给大家安利一个深耕页游十余载的老牌平台——602游戏平台&#x…...

Python从入门到精通(03章):变量、数据类型与类型转换

Python从入门到精通&#xff08;第03章&#xff09;&#xff1a;变量、数据类型与类型转换 开头导语 这是本系列第03章。本文采用“知识点讲解 错误示例 正确写法 自测清单”的结构&#xff0c;目标是让你不仅能看懂&#xff0c;还能独立写出可运行代码。建议你边看边敲&…...