文章目录
xlwings
xlwings和openpyxl类似,都是python操作excel的常用库。
基本结构
创建一个app
import xlwings as xw
# visuble----创建一个app,将他展示出来
# add_book---创建app时,是否创建一个工作簿
app = xw.App(visible=True,add_book=False)
app是xlwings的一个对象,可以利用在这个对象中,打开或者创建一个excel文件。
创建/打开一个books
wb = app.books.open('test.xlsx')
# 打开一个excel文件
wb = app.books.add()
# 添加一个新的工作簿
创建/打开一个sheet及相关操作
sheet1 = wb.sheets[0]
# 选择第一个sheet工作表
wb.sheets.add("sheet2")
wb.sheets.add(name=None, before=None, after=None)
# 创建一个sheet2工作表,before--在哪个表之前,after--在哪个表之后
wb.sheets["sheet2"].delete()
# 删除一个工作表
wb.sheets['Sheet1'].name
wb.sheets[0].name
# 查看Sheet1的名字
wb.sheets[0].name = 'test'
# 修改sheet第一个的工作表名字
wb.sheets[0].clear()
# 清除整张表的内容和格式
wb.sheets.active
# 查看当前活跃的工作表
wb.sheets[0].activate()
# 激活指定的sheet
xlwings处理数据
获取数据
sheet = wb.sheets[0]
sheet.range('a2').value
sheet.range((1,2)).value
sheet['a2'].value
# 单元格A2的值
sheet.range('a1:b2').value
sheet.range((1,1),(2,2)).value
sheet['a1:b2'].value
# 单元格A1:B2范围的值
写入数据
sheet['a1'].value = 10
# 在A1单元格中写入10
sheet['a1'].value = [1, 2, 3]
# 从A1开始横向填入数据[1, 2, 3]
sheet['a1'].options(transpose=True).value = [1, 2, 3]
# 从A1开始纵向填入数据[1, 2, 3]
sheet['b2'].value = [[1,2],[4,5]]
sheet['b2'].options(expand='table').value = [[1,2],[4,5]]
# 从B2开始填入表格
动态获取范围
sheet['a1'].expand()
sheet['a1'].expand('table')
sheet['a1'].options(expand='table').value
使用
expand()
了一个名为Range在一起,左上角的单元格让你在Excel中灵活的设置:您可以左右移动的桌子和改变它的大小,而无需使用类似调整你的代码,例如sheet.range('NamedRange').expand().value
。
numpy数组
import numpy as np
sheet['A5'].value = np.eye(4)
sheet.range('A5').options(np.array, expand='table').value
输出:
array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
pandas数据框
import pandas as pd
df = pd.DataFrame([[1.1, 2.2], [3.3, None]], columns=['one', 'two'])
sheet['A10'].value = df
sheet['A10:C12'].options(pd.DataFrame).value
输出:
one two
0.0 1.1 2.2
1.0 3.3 NaN
sheet.range('A15').options(index=False, header=False).value = df
# 将行标题和索引忽略,指保存数据
在将列表,NumPy数组或Pandas DataFrame写入Excel时,只需要指定左上角的单元格即可,例如:
sheet.range('A1').value = np.eye(10)
xlwings保存数据
wb.save('test2.xlsx')
# 另存为test2.xlsx
wb.close()
app.quit()