xlwings是python的一款开源操作excel的库,可替代VBA编程,相比于其它的excel操作库,特点是支持读写xls、xlsx文件,可修改、保存,实现常见的excel操作。
官方网站:https://www.xlwings.org/
apps查看当前的excel程序信息
books返回当前打开的工作簿
sheets返回当前打开的工作表
>>> import xlwings as xw
>>> xw.apps
Apps([<Excel App 3348>])
>>> xw.books
Books([<Book [员工信息.xlsx]>, <Book [new.xlsx]>])
>>> xw.sheets
Sheets([<Sheet [员工信息.xlsx]Sheet1>])
使用xw.App()方法启动excel程序,设置visible参数是否显示excel可视界面,add_book是否添加新的工作簿;books.open()打开指定位置的工作簿。
import xlwings as xw
app_excel = xw.App(visible=True, add_book=False)
book = app_excel.books.open("员工信息.xlsx")
wb.sheets[]获取指定的工作表,可以按索引获取,从0开始,或者指定表名
例如:wb.sheets[0],wb.sheets[‘Sheet1’]
wb.sheets.add(name=“表2”):添加一个新工作表,name为表名字
wb.sheets.clear():删除表格的内容和格式
wb.sheets.delete():删除表
wb.sheets.autofit(axis=None):自动调整表格,列宽、行高,axis指定行或者列
wb.sheets.range():返回当前表的一个range对象
sheet[“A1”].value:返回单元格A1的值
import xlwings as xw
app_excel = xw.App(visible=True, add_book=False)
book = app_excel.books.open("员工信息.xlsx")
sheet = book.sheets[0]
sheet.autofit()
print(sheet["A1"].value)
print(sheet.range(1, 1))
>>> 员工编号
>>> <Range [员工信息.xlsx]Sheet1!$A$1>
可以用“A1”,或者(1,1)来选择一个单元格;也可以表示一个选区
Range(cell1=None, cell2=None, **options)
cell:字符串形式“A1”、“A1:B2”,元组形式(1,1)、((1,1),(2,2)),或者range对象,示例如下:
Range(‘A1’)
Range(‘A1:C3’)
Range((1,1))
Range((1,1), (3,3))
Range(‘NamedRange’)
Range(xw.Range(‘A1’), xw.Range(‘B2’))
range的常用方法、属性:
Range(‘A1’).color = (255,255,255) 给单元格设置颜色
add_hyperlink():添加链接
copy():复制选定区域单元格
count:返回单元格的数量
delete():删除选定的区域
range(1,1).end(“right”):返回当前选区的最后一个单元格,参数用来指定方向, ‘up’, ‘down’, ‘right’, ‘left’
Range(‘A1’).expand(‘right’):expand方法表示从A1开始选定区域,参数’down’, ‘right’表示方向,“table”表示选取整个系列
range(“A1:C3”).last_cell.row, range(“A1:C3”).last_cell.column:表示选取的区域最后一个单元格的行数和列数,常用于获取当前表格的总行列数
range(‘A1:C4’).rows(1):返回当前选区的第一行,即“A1:C1”
range(‘A1:C4’).column(1):返回当前选区的第一列,即“A1:A4”
Range((1,1)).get_address():返回单元格的地址,’$A$1’
range(1,1).formula=’=SUM(B1:B5)’:设置单元格的公式
更多方法请参考官方文档:
import xlwings as xw
app_excel = xw.App(visible=True, add_book=False)
book = app_excel.books.open("员工信息.xlsx")
sheet = book.sheets[0]
print(sheet.range(1,1).end("right").value)
print(sheet.range(1,1).expand("table").value)
print(sheet.range(1,1).expand("table").last_cell.column)
>>> '语文'
>>> [['员工编号', '姓名', '性别', '出生日期', '年龄', '国籍', '民族', '数学', '语文'], [20201001.0, '张三', '男', datetime.datetime(1987, 1, 20, 0, 0), 33.0, '中国', '汉族', 95.0, 86.0], [20201002.0, '李四', '女', datetime.datetime(1983, 2, 10, 0, 0), 40.0, '中国', '汉族',
86.0, 89.0], [20201003.0, '王五', '男', datetime.datetime(1967, 5, 5, 0, 0), 50.0, '中国', '汉族', 84.0, 96.0], [20201004.0, '赵六', '
男', datetime.datetime(1989, 9, 25, 0, 0), 35.0, '中国', '汉族', 69.0, 78.0], [20201005.0, '刘七', '男', datetime.datetime(1988, 10, 22, 0, 0), 26.0, '中国', '汉族', 78.0, 69.0], [20201006.0, '圆圆', '女', datetime.datetime(1991, 1, 16, 0, 0), 38.0, '中国', '汉族', 88.0, 66.0], [20201007.0, '满满', '男', datetime.datetime(1997, 11, 6, 0, 0), 20.0, '中国', '汉族', 63.0, 80.0]]
>>> 9
将“J1”单元格写入“总分”,并将数学和语文成绩相加,自动调整表格大小
book.save()保存工作簿
book.close()关闭工作簿
app.quit()退出excel程序
import xlwings as xw
app_excel = xw.App(visible=True, add_book=False)
book = app_excel.books.open("员工信息.xlsx")
sheet = book.sheets[0]
list_math = sheet.range("H1").expand("down").value # 获取数学列的值
list_chinese = sheet.range("I1").expand("down").value # 获取语文列的值
list_total = []
list_total.append(["总分"])
for i in range(1, len(list_math)):
list_total.append([list_math[i]+list_chinese[i]]) # 将数学和语文相加
sheet.range("J1").expand("down").value = list_total # 写入J1列
sheet.autofit() # 自动调整大小
book.save() # 保存工作簿
book.close() # 关闭工作簿
app_excel.quit() # 退出excel程序
运行结果如下:
python的xlwings模块操作Excel的常用功能基本就到这里了,更多的内容可以参考官方文档;关于文档中的api “Returns the native object (pywin32 or appscript obj) of the engine being used.”指的是返回windows excel库中的api调用,也就是说通过这个调用基本可以实现excel的所有操作(别再说xlwings模块有些excel功能没有,其实是所有的都有),api可以参考Microsoft的excel库Microsoft.Office.Interop.Excel官方文档:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel?view=excel-pia
最后,欢迎交流学习(python业余爱好者):扫码加我的微信