python操作Excel之提取字符串中的中文/过滤字符串(win32com)

news2025/7/21 15:15:30

Python实用篇-Excel

  • 1.前言
  • 2.关于Excel
  • 3.win32com库操作
  • 4.问题解决
    • 4.1.问题描述
    • 4.2.安装库
    • 4.3.编码与解决

1.前言

       本人大学期间自学了Python后,但是又因不是大数据相关专业,并且没有计划从事Python相关方向,之后就几乎没有怎么使用过Python了。今天,有同事问我怎么批量从Excel某一列字符串中提取中文。以前我都是百度Excel使用技巧或者函数之类的,但是这次没有很好的解决方案,都是说用TEXTJOIN(,,(IF(LENB(MID(A1,ROW(A1:A100),1))=2,MID(A1,ROW(A1:A100),1),"")))函数的,本人测试后发现效果并不好,而且只能wps使用。
  由于office全家桶并不熟练,所以只能放弃。后来转念一想,能不能通过自己比较熟悉的方法来解决呢?没错,代码和函数!Python简洁又有强大的生态,是个好用的生产力工具。于是,我就想到用Python来处理Excel。
  本篇只是简单记录win32com对Excel的读、改和遍历操作,这些操作可以应对基本的Excel操作。

2.关于Excel

       首先,我们要操作Excel表格得清晰它的基本结构。Excel表格文档(wps的表格也是一样的)由单元格和sheet工作表三部分组成。
在这里插入图片描述
  可能很多人,没有注意过Sheet工作表。一个Excel文档可由多个Sheet工作表组成。
  然后还要知道的一点就是Excel的文件后缀有.xls.xlsx两种。.xls是excel2003版本以前的格式,.xlsx是excel2007以后的版本,.xlsx.xls的升级版本,更高效,而且.xlsx向下兼容.xls格式。当然,wps也可以处理这两种类型的文件,现在默认首选都是.xlsx格式了。

3.win32com库操作

       Python操作Excel相关库有很多,详细可看:https://blog.csdn.net/weixin_43820813/article/details/124467183
在这里插入图片描述
  根据上图所示,我发现有两个库比较全面,分别是xlwings和win32com。我选择使用win32com,不过,后来发现xlwings更专业,以后有机会试试。
  到此我们清晰了Excel的结构以及要使用的库,那么怎么编码呢?程序就是数据结构和算法的构成。我们打开Excel文档,首先一定是先选择Sheet工作表然后再对里面的单元格进行操作的,所以抽象一下,我们可以认为一个Excel文档就是一个三维数组,然后每一个Sheet工作表就是一个二维数组。那么操作表格不就简化成操作一个二维数组了。下面按照操作顺序使用win32com操作Excel文档进行讲解。
  (1)首先电脑必须要有Microsoft Excel或者WPS软件,我们使用绝对路径打开文档。

# 获取当前文件夹的绝对路径
def getCurrentFolderPath():
    FolderPath = os.path.split(os.path.realpath(__file__))[0]
    print(FolderPath)
    return FolderPath
	#选择打开的文件模板,win32com还可以操作Word文档,这里选择Excel
    app = win32com.client.Dispatch('Excel.Application')
    # 后台运行,不显示Excel,不弹出警告窗口
    app.Visible = 0
    app.DisplayAlerts = 0
    # 使用绝对路径打开已存在表格
    WorkBook = app.Workbooks.Open(getCurrentFolderPath() + "\\输入.xlsx")
    print("当前文件夹目录:", getCurrentFolderPath())

    (2)打开Excel文档后,我们还要选择Sheet工作表后才能对单元格进行操作。

	# 选择Sheet1工作表,名字请按照文件左小角的名称进行更改
	sheet = WorkBook.Worksheets('Sheet1')

       我们现在可以操作里面的任一单元格,比如读取和修改(修改后要保存才生效):

	# 获取第n行n列的单元格信息
    cell_value = sheet.Cells(1, 1).Value
    print("Value:Cells(1, 1)【即A1】的内容为:", cell_value)
    # 修改A1(第一行第一列)表格信息
    sheet.Cells(1, 1).Value = "这里写修改后的内容"
    # 保存修改到原文件
    WorkBook.Save()

       然后,我们要对二维数组进行操作也就是遍历操作,那么我们必须要知道这个二维数组的行高(行数)和列宽(列数),然后一个for循环就行。这就需要用到UsedRange(使用区域)属性了。

	#获取已使用区域的信息
    print("所有行:", sheet.UsedRange.Rows)# 所有数据,包括中间空行,空行打印(None,)
    print("所有行:", sheet.UsedRange.Columns)#打印结果和sheet.UsedRange.Rows一样
    print("行数:", sheet.UsedRange.Rows.count)
    print("列数:", sheet.UsedRange.Columns.count)

    (3)遍历操作。每个Sheet工作表下都是一个二维数组,所以我们知道行数和列数后就能遍历每一个使用过的单元格了。在遍历的过程中我们就可以进行我们想要的操作。

	# 打印每个单元格的内容
    for i in range(sheet.UsedRange.Rows.count):
        for j in range(sheet.UsedRange.Columns.count):
            #注意单元格的下标是从1开始的
            print(sheet.Cells(i+1, j+1).Value)

    (3)保存操作。我们对Excel文档的操作后需要保存修改才能生效。保存分为两种:保存修改到源文件和另存为一个新的文件。

    # 保存表格(保存修改到原文件)
    WorkBook.Save()
    # 或者另存为新的文件
    # WorkBook.SaveAs(getCurrentFolderPath() + "\\输出.xlsx")

    # 操作完毕后记得关闭表格和退出模板
    WorkBook.Close()
    app.Quit()

       win32com库的Excel更多操作可以看一下这位博主的博客:
  https://blog.csdn.net/Zhong____/article/details/119819890

4.问题解决

4.1.问题描述

       将下面的表格(输入.xlsx)第一列中每个单元格中的中文字符提取出来放到第二列,也就是过滤掉非中文字符。
在这里插入图片描述
       阿么我们可以遍历表格然后根据某个提取规则将第一列每个单元格提取后的字符放到第二列。

4.2.安装库

       如果你没有安装win32com库,那么需要使用命令行进行安装:

pip install pypiwin32

       后面提取中文字符串需要用到re库(正则匹配库),没有的话也一起安装了吧。

pip install re

4.3.编码与解决

       经过前面的介绍,我们已经掌握win32com操作Excel完成读取、遍历、修改和保存操作了。现在问题的关键变成了,如何将一个字符串中的中文提取出来
  我们可以通过一种规则(算法)将字符串中符合条件的字符筛选出来,然后将他们拼接在一起存到第二列中。我们可以使用findall(pattern, str,)函数将一个字符串str中符合正则表达式pattern中的字符以列表的形式返回。正则表达式pattern可以写中文字符的范围,即Unicode编码的\u4e00-\u9fa5之间的字符。最后用join将列表中中文字符拼接起来即可。
  将"输出.xlsx"放在程序所在当前文件夹下,运行如下代码:

import win32com
from win32com.client import Dispatch
import os
import re

# 获取当前文件夹的绝对路径
def getCurrentFolderPath():
    FolderPath = os.path.split(os.path.realpath(__file__))[0]
    print(FolderPath)
    return FolderPath

def solve():
    #选择打开的文件模板,win32com还可以操作Word文档,这里选择Excel
    app = win32com.client.Dispatch('Excel.Application')
    # 后台运行,不显示Excel,不弹出警告窗口
    app.Visible = 0
    app.DisplayAlerts = 0
    # 使用绝对路径打开已存在表格
    WorkBook = app.Workbooks.Open(getCurrentFolderPath() + "\\输入.xlsx")
    print("当前文件夹目录:", getCurrentFolderPath())
    # 选择Sheet1工作表
    sheet = WorkBook.Worksheets('Sheet1')

    print("遍历表格并处理:")
    print("提取A列每一个表格中的中文字符,并将结果输出到B列每一个表格中!")
    # 遍历第一列的每一个单元格
    for i in range(sheet.UsedRange.Rows.count):
            # 下标从1开始,所以i+1;将处理后的字符串放在第二列
            sheet.Cells(i+1, 2).Value = ''.join(re.findall('[\u4e00-\u9fa5]',sheet.Cells(i+1, 1).Value))

    print("处理完毕")
    # 保存修改并另存为
    WorkBook.SaveAs(getCurrentFolderPath() + "\\输出.xlsx")

    # 关闭表格
    WorkBook.Close()
    app.Quit()

if __name__ == '__main__':
    solve()

       运行后生成"输出.xlsx"文件,这个文件内容如下:
在这里插入图片描述

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

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

相关文章

智慧城市应用数据治理的作用有哪些?

智慧城市是基础设施发展的新热词。 主要是指在城市规划、设计、建设、管理与运营等领域中,通过物联网、云计算、大数据、空间地理信息集成等智能计算技术的应用,使得城市管理、教育、医疗、房地产、交通运输、公用事业和公众安全等城市组成的关键基础设施…

现代密码学导论-10-EAV安全

目录 3.2.1 安全的基本定义(EAV-安全) 不可区分实验 The adversarial indistinguishability experiment DEFINITION 3.8 EAV-安全的等价定义(一) DEFINITION 3.9 EAV-安全的等价定义(二) 证明EAV-安全…

[b01lers2020]Welcome to Earth

刚点进来会一直加载&#xff0c;然后跳转到了/die 看一下刚进来页面的源代码 <!DOCTYPE html> <html><head><title>Welcome to Earth</title></head><body><h1>AMBUSH!</h1><p>Youve gotta escape!</p>&l…

leetcode:1157. 子数组中占绝大多数的元素【暴力遍历 + 随机算法相信概率】

目录题目截图题目分析暴力二分随机二分总结题目截图 题目分析 一个很暴力的思路就是把每个num出现的idx记录起来&#xff0c;然后按出现的频率排序优化每次query&#xff0c;遍历每个元素和频率&#xff0c;频率如果已经比threhold小就没有看的必要&#xff0c;直接break如果比…

虎扑论坛数据分析

论坛为用户提供了相同的业余爱好&#xff0c;互动和交流的广阔平台&#xff0c;以及由此产生的庞大数据和复杂的用户交互场景也包含有价值的信息&#xff0c;本文关于虎扑论坛的帖子&#xff0c;个人信息分析&#xff0c;探讨虎扑论坛的用户是什么是什么特点&#xff1f;最近我…

Spring Cloud Stream绑定器架构解析与开发

Spring Cloud Stream绑定器架构解析与开发 根据不同的使用场景我们通常会选择相适应的消息中间件&#xff0c;例如对于日志收集场景可能会选择使用Kafka&#xff0c;对于订单场景通常会选择RocketMQ&#xff0c;不同消息中间件的客户端是不同的&#xff0c;我们需要针对不同消息…

智慧城市面临的机遇与挑战

区域中心城市建设需要智慧城市支撑 建设区域中心城市&#xff0c;除了需要具备在公路、铁路、航空等区域中心城市的枢纽硬件设施外&#xff0c;更需要充分发挥信息化强有力的凝聚和辐射作用&#xff0c;提升区域中心城市在区域交通枢纽服务、区域金融商贸服务、区域物流集散服务…

百趣代谢组学文献分享:茶褐素可促进胆固醇降解

​ 为了解决大家每逢过节必长胖的历史性问题&#xff0c;小编今天给大家介绍一篇发表于Nature Communications 的针对于普洱茶促进减肥的研究。 百趣代谢组学文献分享&#xff0c;所谓药食同源&#xff0c;普洱茶是我国西南云南地区特有的一种传统名茶&#xff0c;因其具有治…

[激光原理与应用-18]:《激光原理与技术》-4- 粒子数反转与“光”强放大的基本原理

目录 一、热平衡&#xff1a; 受激辐射 < 受激接收 二、 “光”相干放大 三、粒子数反转&#xff08;population inversion&#xff09; 四、实现粒子数反转的装置&#xff1a;泵浦 五、实现粒子数反转的条件 六、实现粒子数反转的工作物质 七、实现粒子数反转的方式…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-重复值和缺失值处理

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 在银行借贷场景中&#xff0c;评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段&#xff0c;它衡量向别人借钱的人&#xff08;受信人&…

「Vue系列」欢迎传送到“Teleport”星球

前言 大家好&#xff0c;我是落叶小小少年&#xff0c;我一直谨记学习不断&#xff0c;分享不停&#xff0c;输入的最好方式是输出&#xff0c;我始终相信 用最核心代码更容易理解深的技术点用通俗易懂的话&#xff0c;讲难的知识点 之前有学习并写了KeepAlive组件的实现原理…

Nginx 报错问题汇总(持续更新ing)

目录 一、nginx: [emerg] invalid number of arguments in "include" directive in C:\Program Files\nginx-1.15.4/conf/nginx.conf:61 总结&#xff1a; 二、nginx: [error] OpenEvent("Global\ngx_reload_2152") failed (5: Access is denied) 解决方…

《Java》图书管理系统(已升级)

目录 前言 效果展示 功能模块 书架 定义书的类 创建书架 用户 User用户类 AdminUser管理员 NormalUser普通用户 功能 接口 FindOperation 查找图书 AddOperation添加图书 DelOperation删除图书 BorrowOperation借阅图书 DisOperation 打印图书 RetOperation归还图…

Spring Boot 3.0.0 GA版本正式发布,期待已久的SpringBoot3发布了

期待已久的SpringBoot3.0.0发布了发布说明新版本的亮点分析1. Java 17 baseline 和 Java 19 支持2. 支持 [GraalVM native images](https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/native-image.html#native-image)&#xff0c;取代实验性的 Spring Native 项目…

linux篇【11】:linux下的线程<中序>

目录 一.线程互斥 1.三个概念 2.互斥 &#xff08;1&#xff09;在执行语句的任何地方&#xff0c;线程可能被切换走 &#xff08;3&#xff09;抢票场景中的问题 &#xff08;4&#xff09;解决方案 3.加锁 &#xff08;1&#xff09;加锁介绍 &#xff08;2&#xf…

STC 51单片机39——汇编语言 按钮流水灯

每按一下按钮&#xff0c;灯就移动一个 ORG 0000H LJMP MAIN ORG 0003H ;中断矢量 LJMP INT MAIN:SETB EA ;开总中断允许“开关” SETB EX0 ;开分中断允许“开关” SETB PX0 ;高优先级 SETB IT0 ;边沿触发 MOV A,#0FEH ;给…

Linux系统编程(二)——Linux系统IO函数

在第一篇的时候写到了系统环境的搭建以及各种调试的方法&#xff0c;接下来讲述关于系统函数的使用。 目录 0x01 标准C库IO函数和Linux系统IO函数对比 一、标准C库IO函数操作流程 二、标准C库IO和Linux系统IO的关系 三、虚拟地址空间 0x02 LinuxIO函数实例 一、open()、…

dubbo以xml方式操作和新版dubbo-admin安装

文章目录1 dubbo xml配置1.1 提供者1.1.1 提供者接口1.1.2 提供者实现类1.1.2.1 项目结构图示1.1.2.2 pom.xml1.1.2.3 实现类接口1.1.2.4 配置文件1.1.2.4.1 xml配置1.1.2.4.2 结合注解方式1.1.2.5 启动类1.1.2.5.1 直接读取配置文件1.1.2.5.2 Main.main启动1.1.3 其他方式配置…

最新持续更新Crack:LightningChart 行业使用大全

LightningChart .NET 和 JavaScript 解决方案旨在通过彻底的图表优化、最小的延迟和流畅的呈现来满足行业最苛刻的数据可视化要求。LightningChart .NET 和 JavaScript 直观的 API 使用户能够使用适用于任何桌面、移动和平板设备的鼠标和触摸屏交互功能轻松操作最复杂的图表。 …

JSP JAVA javaweb企业仓库库存管理系统(仓库进销存管理系统ssm库存管理系统仓库管理系统)

JSP 企业仓库库存管理系统&#xff08;仓库进销存管理系统ssm库存管理系统仓库管理系统&#xff09;