首先,xlwing免费开源,功能强大;pro版本商业收费,个人免费。
但是也有缺点,xlwing必须配合Excel来使用。
如果想在linux上使用,我还是推荐使用pandas或者openpyxl
xlwing配合jupyter可以交互式操作excel文档。xlwing可以像VBA宏一样操作Excel文档。可以很好的适配pandas和matplotlib
xlwing官方文档
import xlwings as xw
打开Excel文件有两种方式,,一种是实例化xw.App()
,另一种是你手动双击Excel文件打开(Excel通常打开方式)
两种方式都可以打开,选其一就可。
app=xw.App(visible=True,add_book=False)
add_book
表示打开Excel的时候是否创建新的工作簿
我建议这样写,避免程序出错也能关闭Excel软件
with xw.App(visible=True,add_book=False) as app: # 这样写就不用再写app.kill()了,会自动关闭Excel软件
补充:
这是我认为比较标准的方式,编写正式脚本批处理命令的时候使用这个。
双击Excel文件,(emmm,这种方式应该都会吧。。。)
补充:
如果想在代码中获取xw.App对象,可以使用以下代码:
# 第一种方式:
app = xw.apps.active
# 第二种方式:
app = xw.apps[3508] # 这个3508是excel程序运行的PID,每次启动Excel都不一样可以通过xw.apps.keys()或者任务管理器查看
wb = app.books.add()
或者
wb = xw.Book() # 可以不用实例化xw.App()
wb = app.books.open(r'F:\ab.xlsx') # 打开
# 或者 wb = xw.Book(r'F:\ab.xlsx')
如果有多个工作簿同时打开了,想获取活动的工作簿,可以用以下代码:
# 第一种方式
wb = xw.books.active # 使用xw接口(可以不用实例化app,但是必须有个excel开着)
# 第二种方式
app = xw.apps.active
wb = app.books.active # 使用app接口(必须实例化app,)
# 这两种方式各有`优缺点`,第一种方式更“短”,第二种方式更规范化,灵活运用。
如果想获取多个已打开工作簿中的某一个,可以通过索引的方式
wb = xw.books[1] # 第二个工作簿赋给wb变量
# 或者
# wb = app.books[1]
前面三个部分(添加工作簿“”,“ 对已有工作簿操作”,“绑定工作簿”)是获取Book对象。程序的最后肯定是保存了,保存的时候可以选择路径。
wb.save(r'F:\aa.xlsx') # 保存
wb.close() # 关闭
# `wb.close()`要注意一下,关闭的是工作簿,Excel软件没有关闭
app.kill() # 关闭Excel软件
sht=wb.sheets.add("Name")
sht = wb.sheets[0] #工作表序号 sht1 = wb.sheets['Name'] #工作表名称
rng = sht.range('a1')#方式1
rng = sht['b1'] #方式2
rng = sht[0,0] #方式3
rng = sht.range('a1:a5') #方式一
rng = sht['a1:b5'] #方式二
rng = sht[:5,0] # 表示第一列的前五行
sht.range('a1').expand('table')# 表示从a1单元格开始创建一个表格区域
info = sht.used_range
nrows = info.last_cell.row # 行数
ncolums=info.last_cell.column # 列数
sht["a1"].value=
sht["a1:a10"].api.NumberFormat = "@" #设置为文本格式
sht["a1:a10"].api.NumberFormat = "0.0" #设置为小数格式
sht["a1:a10"].api.NumberFormat = "yyyy-mm-dd" #设置为"-"连接的日期格式
sht["a1:a10"].api.NumberFormat = "0%" #设置为百分比
rng.clear()