Python 库 xlwings 操作 Excel 文档
.
Python 中操作 Excel 的扩展库主要有:
- xlwings:在 GitHub 上获得了 1.6k 的 Star。 可结合 VBA 实现对 Excel 的编程。
- openpyxl:代码托管在 Bitbucket 上 https://bitbucket.org/openpyxl/openpyxl/src/default/。 简单易用,功能广泛,还支持图表功能,但是对 VBA 支持不好。
- pandas:在 GitHub 上获得了 23.8k 的 Star。主要用于数据处理。
- win32com:在 GitHub 上获得了 2.1k 的 Star。==仅支持 window 系统==
- xlsxwriter:在 GitHub 上获得了 2.1k 的 Star。同 openpyxl 的功能相似,但是不能打开/修改已有文件。
- xlutils:仅支持 xls 文件及 excel 2003 及以前版本。
每个扩展库的功能都有其侧重点,根据所需要的功能,选择所需的扩展库即可。这里主要介绍通过 xlwings 对 Excel 文件进行操作。
选择 xlwings 的几个原因:
- 工作系统同时兼容 Windows 和 Mac ,支持 WPS 文件。
- 语法简单,基本上用过一次就会记住。
- 功能齐全,支持新建、打开、修改、保存等等。
- 可以调用已有的 VBA 程序(这个暂时我还没有用到)。
通过
pip install xlwings
来安装 xlwings,当前最新版本是 0.18.0
xlwings 的口号是:”==让 Excel 跑的飞快==”,感觉有点意思。它是基于 BSD-licensed(伯克利软件发行版许可协议) 的Python库,它让Python和Excel之间的相互调用变得更加容易。
新建文件
通过以下命令来新建一个 Excel 文件
或另一种方式
打开已有文件
通过以下命令来打开一个已有文件
在上面的示例中使用的相对路径,你也可以使用绝对路径。 当在 windows 上使用时,注意 “" 的转义问题,推荐直接在路径字符串上加 r 「r’g:\python\test.xlsx」 。
也可以使用另外一种方式
读取并修改文件内容
Excel 文件是由一个个工作表组成的,要想操作文件内容,需要先打开工作表「sheet」,打开 sheet 由以下几种方式:
工作表是由一个个单元格组成的,最终我们操作的是一个个单元格中的数据,接下来一块来看下单元的数据操作。
根据单元格里面存储的是数字、字符串、空白还是日期,返回的 python 对象类型分别是 float, unicode, None 或 datetime
前面操作的是单个单元格,接下来我们来操作一行或一列
sheet.range('xx').value
默认按行写入数据,那么如果我们想要按列写入数据怎么办,按列写入数据有以下两种方法。
大多数情况下,我们操作数据表写入的都是多行的数据,由上面的基础实际上多行数据就是一个二维的列表,一次写入和读取多行的方法如下:
但是 xlwings 还提供了另外一种更加方便的方式来操作一个区域块,通过 expand 或 options 中的 expand 参数,expand 使用的是当前已获取的区域对象,而 options 中的 expand 参数在条用时才计算区域对象,推荐使用 options 中的 expand 参数,是你可以在更改区域后及时获取区域的变化。下面的代码,可以清楚的表达两种方式的不同。
以下是一个完整的例子:
运行以后的输入结果如下:
程序运行完成后,在当前文件下将看到一个 test.xlsx 的 Excel 文件,文件内容如下:
其他
- 清除单元格内容和格式
sheet.range('A1').clear()
- 单元格的列标
sheet.range('A1').column
- 单元格的行标
sheet.range('A1').row
- 单元格的行高
sheet.range('A1').row_height
- 单元格的列宽
sheet.range('A1').column_width
- 列宽自适应
sheet.range('A1').columns.autofit()
- 行高自适应
sheet.range('A1').rows.autofit()
- 单元格背景色(RGB)
sheet.range('A1').color = (34,139,34)
- 清除单元格颜色
sheet.range('A1').color = None
- 输入公式,相应单元格会出现计算结果
sheet.range('A1').formula='=SUM(A1:E1)
- 获取单元格公式
sheet.range('A1').formula_array
Comments