lifelifehahaha 2023-02-14 11:39 采纳率: 100%
浏览 37
已结题

如何用pyinstaller打包excel文件,并用xlwings调用?

大家好,我在尝试用pyinstaller打包excel文件时,遇到如下问题:

步骤1:通过如下代码调用excel文件。

......
import xlwings as xw
app = xw.App(visible=True, add_book=False)
wb = app.books.open('.\\ecs\\als.xlsx')
......

步骤2:通过修改spec文件设置,将ecs文件夹中的文件(包括als.xlsx),打包到生成的exe中的ecs文件夹下。

......
a = Analysis(
    ['entr.py'],
    pathex=['C:\\Users\\Administrator\\PycharmProjects\\pythonProject3\\Package_20230131'],
    binaries=[],
    datas=[('.\\ecs','.\\ecs'), 
......

但是实际执行时发现,无法打开ecs文件夹下面的als.xlsx文件,且exe程序会因无响应而退出。
但是如果直接把含有als.xlsx的ecs文件夹,放在exe同目录下,是可以读取到的。

通过网络搜索未发现类似问题的解答,请问大家是否遇到过类似问题。
该如何设置,才能实现将excel文件通过pyinstaller打包到exe中,并通过xlwings调用?
非常感谢!

  • 写回答

2条回答 默认 最新

  • 量化研究所 2023-02-14 18:37
    关注

    您需要通过修改spec文件,将ecs文件夹中的als.xlsx文件正确地打包到exe程序中,以便程序可以在运行时正确读取它。同时,您还需要确保在运行时将打包后的ecs文件夹中的文件路径传递给xlwings。

    以下是一些可能有用的步骤:

    在spec文件中添加Tree元组来指定ecs文件夹中包含的文件应该打包到哪个目录下。例如:

    a = Analysis(['entr.py'],
                 pathex=['C:\\Users\\Administrator\\PycharmProjects\\pythonProject3\\Package_20230131'],
                 binaries=[],
                 datas=[],
                 # Add this Tree element to include the ecs folder and its contents in the build
                 trees=[Tree('.\\ecs')],
                 hiddenimports=['xlwings._xlwindows'])
    

    在代码中使用sys._MEIPASS获取打包后的exe程序的路径,以便正确读取打包后的文件。例如:

    import sys
    import xlwings as xw
    
    if hasattr(sys, '_MEIPASS'):
        # This code will run if the script is run from a PyInstaller executable
        app = xw.App(visible=True, add_book=False)
        # Use os.path.join to safely join the path to the executable with the name of the file
        wb = app.books.open(os.path.join(sys._MEIPASS, 'ecs', 'als.xlsx'))
    else:
        app = xw.App(visible=True, add_book=False)
        wb = app.books.open('.\\ecs\\als.xlsx')
    

    在此示例中,我们使用os.path.join函数来组合路径,以确保路径正确。sys._MEIPASS变量包含了PyInstaller打包后的程序所在的路径。

    希望这些步骤能帮助您正确地使用PyInstaller打包Excel文件,并通过xlwings调用它。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题