Python xlwings库学习笔记(1)
Python是最近几年很火的编程语言,被办公自动化的宣传吸引入坑,办公自动化必然绕不开Excel的操作,能操作Excel的库有很多,例如:
xlrd
xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。
1、xlrd支持.xls,.xlsx文件的读
2、通过设置on_demand变量使open_workbook()函数只加载那些需要的sheet,从而节省时间和内存(该方法对.xlsx文件无效)。
3、xlrd.Book对象有一个unload_sheet方法,它将从内存中卸载工作表,由工作表索引或工作表名称指定(该方法对.xlsx文件无效)
xlwt
xlwt是一个用于将数据和格式化信息写入旧Excel文件的库(如.xls)。
1、xlwt支持.xls文件写。
xlutils
xlutils是一个处理Excel文件的库,依赖于xlrd和xlwt。 1、xlutils支持.xls文件。 2、支持Excel操作。
xlwings
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。 1、xlwings支持.xls读,支持.xlsx文件读写。 2、支持Excel操作。 3、支持VBA。 4、强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。
openpyxl
openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。 1、openpyxl支持.xlsx文件的读写。 2、支持Excel操作。 3、加载.xlsx文件可以使用read_only模式。 4、写入.xlsx文件可以使用write_only模式。
xlsxwriter
xlsxwriter是一个用于创建Excel .xlsx文件的库。 1、xlswriter支持.xlsx文件写。 2、支持VBA。 3、写入.xlsx文件时使用内存优化模式。
win32com
win32com库存在于pywin32中,是一个读写和处理Excel文件的库。 1、win32com支持.xls,.xlsx文件的读写,支持.xlsx文件的写。 2、支持Excel操作。
DataNitro
DataNitro是一个内嵌在Excel中的插件。 1、DataNitro支持.xls,.xlsx文件的读写。 2、支持Excel操作。 3、支持VBA。 4、收费
pandas
pandas通过对Excel文件的读写实现数据输入输出 1、pandas支持.xls,.xlsx文件的读写。 2、支持只加载每个表的单一工作页。
为什么选择Xlwings
这么多库,我为什么会选择Xlwings学习了,主要是因为我的数据大部分是从系统导出的,自身带了一些格式,已经试过xlrd、xlutils、openpyxl、xlsxwriter、pandas都不能自动打开,必须经过处理之后才能打开,具体原因未找到,只有xlwings能正常操作。如果有知道原因的朋友请指点!
导入库
import xlwings as xw
打开excel
#visible是否可见。False表示后台运行。add_book 是否新建一个工作簿
app = xw.App(visible=True,add_book=True)
新建excel工作簿
wb = app.books.add() #创建新的book
wb = app.books.open()
wk = xw.Book()
wk = xw.books.open()
打开工作薄
wb = app.books.open()
wb = xw.Book()
wb = xw.books.open()
返回所有book对象集合
app.books #返回一个打开的全部workbook的列表。Python打开的和手动打开的是不互通的
退出excel(操作完了必须退出,否则会一直有一个EXCEL进程保留在后台运行)
wb.save() #保存文件.
wb.close() #关闭文件.
app.kill(): #中止进程,强制退出。
app.quit(): #在不保存的情况下,退出excel程序。
活动对象
# 活动应用程序(即Excel实例)
app = xw.apps.active
# 活动工作簿
wb = xw.books.active # 在活动
appwb = app.books.active # 在特定app
# 活动工作表
sht = xw.sheets.active # 在活动工作簿
sht = wb.sheets.active # 在特定工作簿
# 活动工作表的Range
xw.Range('A1') #在活动应用程序的活动工作簿的活动表上
活动工作表的捷径 :xw.Range
如果要快速与活动工作簿中的活动工作表通信,则不需要实例化工作簿和工作表对象,可以简单地执行:
import xlwings as xw
xw.Range('A1').value = 'Foo'
xw.Range('A1').value'Foo'
注意:在与Excel交互时,您应该只使用xw.Range。在脚本中,您应该始终通过工作簿和工作表对象,如上所示。
选定单元格
可以使用A1表示法,Excel的基于1的索引的元组,命名范围或两个Range对象来实例化范围:
xw.Range('A1')
xw.Range('A1:C3')
xw.Range((1,1)) #基于1的索引的元组,相当于'A1'
xw.Range((1,1), (3,3)) #基于1的索引的元组,相当于'A1:C3'
xw.Range('NamedRange') #命名范围
xw.Range(xw.Range('A1'), xw.Range('B2'))#两个Range对象来实例化范围,相当于'A1:B2'
基于1的索引的元组在列操作时比较方便,免于目标单元格在查出多少列后,还要去对应A、B、C...列。
圆括号遵循Excel的行为(即基于1的索引),而方括号使用Python的基于0的索引/切片。例如,以下表达式都引用相同的范围:
xw.apps[763].books[0].sheets[0].range('A1') #工作簿1中第一个工作表的A1单元格xw.apps(10559).books(1).sheets(1).range('A1') #工作簿1中第一个工作表的A1单元格xw.apps[763].books['Book1'].sheets['Sheet1'].range('A1') #工作簿book中sheet1工作表的A1单元格
xw.apps(10559).books('Book1').sheets('Sheet1').range('A1')#工作簿book中sheet1工作表的A1单元格
请注意,apps键是进程ID(PID)。可以通过xw.apps.keys()获取PID列表。
Range索引/切片
>>> rng = xw.Book().sheets[0].range('A1:D5')
>>> rng[0, 0]
>>> rng[1]
>>> rng[:, 3:]
>>> rng[1:3, 1:3]
未完待续,自己写一遍,对学习是很有益,即使很多都是复制粘贴的,也有很多细节在纯粹的看时没注意到的。