Python-Excel 零基础学习xlwings,看这篇文章就够了

   日期:2024-12-01     作者:caijiyuan       评论:0    移动:http://oml01z.riyuangf.com/mobile/news/5640.html
核心提示:Python-Excel 零基础学习xlwings,看这篇文章就够了这篇文章 在日常生活中我们或多或少的都会跟Excel打交道,比如做销售统
Python-Excel 零基础学习xlwings,看这篇文章就够了 这篇文章


在日常生活中我们或多或少的都会跟Excel打交道,比如做销售统计,人力的考勤,学生的考试成绩等等,甚至在某些领域会涉及到批量操作Excel表格,那对于非程序员来说,可能使用Excel中的函数,但是在某种场景下这些又是不好使的,只能熬夜加班啦!但是对于程序员来说,可能就是分分钟的事,轻松搞定。

那在我们Python中有哪些模块(或者第三方库)可以轻松处理Excel 呢?给大家列出来学习一下

哇slwings是不是很香,更详细的大家可以去参看趣味干货中的

简单介绍下xlwings,xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。开源免费,一直在更新。特点

1)xlwings支持.xls读,支持.xlsx文件读写。

2)支持Excel操作。

3)支持VBA。

4)强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。

文档链接

有没有发现,xlwings宗旨就是让Excel飞起来


像安装其他模块一样,使用pip安装即可

pip install xlwings

如果你是在使用Anaconda也可以,使用conda安装

conda install xlwings

请注意,官方的conda软件包可能落后于几个版本。但是,您可以使用conda-forge通道(如果已经安装了xlwings,请用upgrade替换安装

conda install -c conda-forge xlwings

注意:在安装过程中,xlwings也是有依赖项的,但是依赖项通过conda或pip自动安装

Windows:pywin32 Mac:psutil,appscript

如果原来安装过,使用如下操作更新

要更新到最新的xlwings版本,请在命令提示符中运行以下内容

pip install –upgrade xlwings

或者

conda update -c conda-forge xlwings

通过运行以下内容(确保先关闭Excel,确保您的Excel加载项版本与您的Python软件包保持同步

xlwings addin install

若要,移步下面的操作

要完全,请先卸载加载项,然后使用安装xlwings软件包时使用的相同方法(pip或conda)卸载xlwings软件包

xlwings addin remove

然后

pip uninstall xlwings

或者

conda remove xlwings

最后,手动删除个人文件夹中的.xlwings目录(如果存在)。


在我们操作之前可以先了解下,如下内容

  • :创建一个不存在的工作薄或者工作表

  • :打开一个已经存在的工作薄

  • :就是告诉程序,你要操作哪个对象。比如你打开了A、B、C三个工作薄,现在你想操作A工作薄,就要先引用A

  • :我们可以同时打开多个工作薄,但是一次只能操作一个工作簿,我们正在操作的这个工作薄称为**当前活动工作薄。

在xlwings中

  • Excel程序用App来表示,多个Excel程序集合用Apps表示

  • 单个工作簿用Book表示,工作簿集合用Books表示

  • 单个工作表用Sheet表示,工作表集合用Sheets表示

  • 区域用Range表示,既可以是一个单元格,也可以是一片单元格区域。

对Excel进行操作主要使用如下三个类

import xlwings as xw xw.App 打开一个excel应用 xw.Book 创建一个工作薄 xw.Sheet 创建一个工作表

初试:创建一个excel表格并保存

App就是我们打开的一个Excel应用,在我们程序员看来一个App对象就是一个Excel的实例,在此实例下创建工作薄。因此我们要创建工作簿,就必须先创建App实例。一个App实例可以创建多个工作簿Book。

使用xlwings可以创建一个或者多个App,而每个App中又可以创建多个工作薄Book,并且多个App之间是相互独立的。

要使用xlwings就需要先引用该库

引入之后,我们可以查看xw下所有的app

每个App对应一个PID值,可以看作是数字编号,可以用来识别不同的App。

我们可以通过xw.app()创建一个新的app实例

其中可以设置参数visible:用来设置程序是否可见,True表示可见(默认,Flase不可见。add_book用来设置是否自动创建工作簿,True表示自动创建(默认,False不创建。当设置成add_book=False时,可以创建App,但是还未生成PID,只有当这个App创建了工作簿后,才会生成自己的PID 。

创建成果后可以查看pid

综合

结果

可以引用某个app实例进行操作并激活

在操作一个app对象的时候要先引用工作薄,但是引用并不代表激活,激活就是当前操作的工作薄。

常用的属性有

app.screen_updating:打开屏幕更新,我们可以看到xlwings对Excel进行操作的过程,关闭更新可以加速脚本运行。默认是打开的。 app.display_alerts:在使用Excel的过程中,经常会遇到一些提醒信息,比如关闭前的保存提示、数据有效性的警告窗口,若想隐藏这些窗口可以设置成False。如果提醒信息是需要反馈的,Excel会选择默认的方式True

其中关闭app有两种方式,通过测试使用kill()函数更快些。

前面介绍了app,并且一个app可以包含多个工作薄,如何在app中创建工作薄呢

官方给出的创建工作薄的方式如下

两种方式的区别:方式1是创建一个新的App,并在新App中新建一个Book,方式2是在当前App下新建一个Book

如果是打开一个已经存在的则使用

其中创建Book对象的参数如下

Book(fullname=None, update_links=None, read_only=None, format=None, password=None, write_res_password=None, ignore_read_only_recommended=None, origin=None, delimiter=None, editable=None, notify=None, converter=None, add_to_mru=None, local=None, corrupt_load=None, impl=None)

详细情况可以参考文档

xw.Book('绝对或者相对路径的excel文件')既可以打开工作薄也可以引用工作簿。

关闭工作薄也很简单,就是使用wb.close(),注意:wb.close()只是关闭并不会保存,所以在关闭之前必须要使用save()进行一下保存才可以。可以考虑使用with搭建上下文,实现关闭资源。

若想获取当前活动App中的所有books,可以直接通过下列方式

参数1为工作表名称,省略的话为Excel默认名称,参数2为插入位置,可选before或者after

若想引用某一个Sheet,可以通过下面方式

sht = wb.sheets(‘sheet1’) # 指定名称获取sheet工作表 sht = wb.sheets(1) # 根据序号获取 sht = xw.sheets.active #获取当前活动的工作表

sheet对象可以调用的方法有

常用的有

可以通过属性获取获取工作表的名称、所有单元格的区域对象、当前工作表的索引值

在操作区域或者单元格之前,首先就要引用他们,其实就是表明你要操作的区域或者单元格是哪些。可以认为区域是多个单元格。

引用区域的方式有很多种,下面列举一下常见的引用方式

区域管理可以通过如下方式

range.offset(row_offset=5,column_offset=2) 表示偏移,row_offset行偏移量(正数表示向下偏移,负数相反,column_offset列偏移量(正数表示向右偏移,负数相反) 注意:是将 进行偏移,内容不进行偏移 range.expand(mode=’down’) ,参数可选取 ‘down’ , ‘right’ ,’table’ ,类似我们使用向下、向右或者下右方的区域扩展操作。 range.resize(row_size=4, column_size=2) 表示调整选中区域的大小,参数表示调整后区域的行、列的数量。 range.current_region 表示全选 类似Ctrl + A

其他参考

range.add_hyperlink(‘ ’,’百度’) range.color = (128,128,128) RGB通道颜色,可获取or设置 range.row/column  获取第几行/列,注意是第几而不是下标 range.formula  可以设置计算表达式,用来进行表内计算 range.current_region  返回当前range所在区域的区域表达,这个比较难描述,好比一个Excel中互相连接的单元格都是连城一片,两个片之间没有任何相邻就是互相独立的。 range.count  返回这个range中共有多少单元格,合并单元格仍然按未合并的算 range.offset(a,b)  获取到当前range向右a格,向下移动b格同样大小的那片区域,ab可以为负值 range.rows/columns  返回行/列的各个range对象 range.expand


若想更新里面的数据,由于有些商品被卖出,商品数量就会发生变化。另外还有一批货是新引入的。参考代码如下

结果

 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类最新资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
最新资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号