Python-Excel-xlwings
选取Python的写Excel的包,网上介绍不少,很多推荐xlwings的包。自己用了感觉还可以,满足了自己的需求,就是还是有些小坑的。
基础结构
一个app与一个Excel实例对应;一个book对应一个工作簿;一个工作簿有多个sheet;
官方注解:
在Mac系统里, 虽然xlwings允许多个Excel同时运行,但这不是Mac版的Excel官方支持的功能:不像在Windows系统里,当文件已经在另外一个Excel实例中打开的时候,不会要求你打开一个只读版本。就是说你得自己小心注意,避免同样的文件被不同的Excel实例重写。
在编写程序的时候 不要让一个excel文件,被多个实例app打开,这样的在可能导致数据异常。例如,没有保存成功。
快速使用
简单介绍xlwings的入门使用,文件操作分为以下几种场景,主要注意 异常场景的保护,详细可以参照官方文档。
打开已保存的Excel文档
# 导入xlwings模块,打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
import xlwings as xw
app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
# 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
filepath=r'test.xlsx'
wb=app.books.open(filepath)
wb.save()
wb.close()
app.quit()
#另外一种方式,其他方式可以参照官方API
wb=xw.Book("test.xlsx")
wb.save()
新建Excel文档
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.add()
wb.save(r'test.xlsx')
wb.close()
app.quit()
打开test文档,若存在打开,若不存在新建文档
app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
# 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
filepath=r'test.xlsx'
try:
wb=app.books.open(filepath)
except Exception as e:
print(e)
wb=app.books.add()
wb.save(r'test.xlsx')
wb.sheets['sheet1'].range('A1').value='人生海海'
wb.save()
wb.close()
app.quit()
异常情况
描述
- 文件正常打开了,也执行保存了。但是发现内容并有没有保存成功,甚至文件有时候还打不开。
- 程序崩溃
解决方案
之前程序异常退出,会导致文件句柄没有释放,会导致前面的情况发生。让后面的程序能够正常执行,可以执行如下临时代码:
# 结合“基础结构”这一节,可以理解程序的作用,就是让实例能够正常退出
print(xw.apps)
for app in xw.apps:
app.quit()
完整解决方案是,一定要保证程序正常退出。
try:
#操作过程
pass
except Exception as e:
wb.save()
wb.close()
app.quit()
# raise e