ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python-Excel-xlwings

2020-06-07 18:07:21  阅读:479  来源: 互联网

标签:False wb Python app xlwings Excel test xw


选取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

标签:False,wb,Python,app,xlwings,Excel,test,xw
来源: https://www.cnblogs.com/meiguhuaxian/p/13061447.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有