xlwings简介
NOTE:以下仅仅是简介,我针对自己用到的api进行了总结,详见官方文档https://docs.xlwings.org/zh_CN/latest/api.html#books
1. 简介
目前,市面上能操作excel的第三方python库有很多,例如:xlrd/xlwt/xlutils、openpyxl等等。但是,这几个库都用起来不是很舒服。xlrd/xlwt在读写方面速度不是很快,而openpyxl不能操作*.xls文件。所以这次我试用了一下xlwings,感觉不错,xlsx/xls文件都能读写,速度也还可以。
2. 对象层次
xlwings.apps.books.sheets.range
apps: 当前打开的多个excel应用
books: 单个excel应用中打开的多个xls/xlsx文件
sheets: 单个book中的多个sheets
range: 单个sheet中的范围。eg. range(1, 1)/range(‘A1‘)代表第一个单元格
3. app
-
app = xw.App(visible=True, add_book=False)
:打开一个excel程序。add_book如为True,则打开的excel会默认生成一个新建的book -
wb1 = app.books.open(filename)
、wb2 =xw.Book(filename)
:打开一个book。这2种方法都是打开一个book,前者是在一个app中打开,而后者是每打开一个book,都会打开一个app -
wb1.quit()
:退出,但不会保存
4. book
-
wb.sheets
:获得一个book中的所有的sheet的集合 -
wb.sheets(sheetname)
、wb.sheets[index]
:打开一个sheet,前者用sheetname,后者用索引 -
new_wb = wb1.sheets.add(name=‘newshtname‘, after=‘sheet1‘)
:在sheet1后面新建一张名为newshtname的sheet,并返回给new_wb -
wb.save()
:保存 -
wb.close()
:关闭
5. sheet
-
sheet.autofit(axis=None)
:自适应。axis=r(c)则对行(列)做自适应,无参数则对整个sheet -
copyed = sht.copy(name=‘abc‘, after=sht)
:将sht管理的sheet复制成名为abc的sheet,放在sht的后面,并返回给copyed对象 -
sht.range(r, c)
:返回一个r行c列的单元格。这里的行列的起始索引都是1,这点要注意
6. range
-
range(r, c)
、range((r1, c1), (r2, c2))
、range(‘A3‘)
、range(‘A1:B5‘)
:这些都返回sheet里的一片区域 -
range.clear()
、range.clear_contents()
: 前者清除区域的内容和格式,后者仅清除区域内的内容 -
range.color()
:获取区域内的颜色 -
old_range.copy(new_range)
:将old_range中的内容复制到new_range中。new_range可以是其第一个单元格 -
range.expand(mode=‘table‘)
:扩展当前range的范围。mode默认为table
,但可以取down
,right
,table指的是在行列方向上的扩展,而down/right是行或列的扩展。而且它的扩展是有前提条件的:如果在扩展方向上有空白单元格,则停止扩展 -
range.offset(rowoffset, coloffset)
:返回一个从指定单元格为起始点的区域对象 -
options(convert=None, **options)
:允许用户设定转换器和相关的选项。转换器定义了Excel的区域及其值在读写过程中如何转换。如果没有明确指定转换器,会使用基转换器(base converter)
这个options很强大,主要是进行一些转换。我目前只用了ndim
,它表示维数。eg.range.options(ndim=2)
可以将一个一维列表转换成二维,详见文档 -
range.resize(row_size=None, column_size=None)
:调整当前range的范围,和expand
不一样。调整后范围为以range的左上角为起点为,高为row_size,宽为column_size的一片区域
结语:之所以会用到xlwings,是因为最近在公司每天都要登记台账,每天都会花费很长的时间,而且都是机械、重复的动作,所以就写了个小脚本。以上是我用到的东西,xlwings中还有很多api我没用到,如Chart/Picture等等。以后有用到再去啃吧……。