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()

异常情况

描述

  1. 文件正常打开了,也执行保存了。但是发现内容并有没有保存成功,甚至文件有时候还打不开。
  2. 程序崩溃

解决方案

之前程序异常退出,会导致文件句柄没有释放,会导致前面的情况发生。让后面的程序能够正常执行,可以执行如下临时代码:

# 结合“基础结构”这一节,可以理解程序的作用,就是让实例能够正常退出
print(xw.apps)
for app in xw.apps:
    app.quit()

完整解决方案是,一定要保证程序正常退出。

try:
    #操作过程
    pass
except Exception as e:
    wb.save()
    wb.close()
    app.quit()
    # raise e
posted @ 2020-06-07 17:53  梅谷暴君  阅读(554)  评论(0编辑  收藏  举报