zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    单例模式 (线程安全)
    Hystrix (容错,回退,降级,缓存)
    Feign负载均衡
    Ribbon远程调用
    Eureka服务注册与发现
    适配器模式
    docker学习(二)
    使用Eclipse进行远程调试(转)
    docker学习(一)
    Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新(转)
  • 原文地址:https://www.cnblogs.com/meiguhuaxian/p/13061447.html
Copyright © 2011-2022 走看看