【问题标题】:Save excel workbook in Python在 Python 中保存 Excel 工作簿
【发布时间】:2022-01-31 01:28:30
【问题描述】:

我是 Python 新手,我需要打开一个文件夹中的所有 Excel(一个一个),等待一段时间让 SAS 插件加载新数据,然后保存并关闭它。我尝试使用一些库,但我无法获得预期的结果。

使用子进程:

import os
import subprocess

path = "C:\\Users\\...\\Desktop\\TEST_EXCEL"

for file in os.listdir(path):
    filename = os.path.join(path, file)
    if filename.endswith(".xlsx"):    
       proc = subprocess.Popen([filename], shell=True)
       time.sleep(60)
       subprocess.call(['taskkill', '/F', '/T', '/PID', str(proc.pid)])

Popen 函数打开 Excel,然后等待 60 秒,这样插件就可以加载数据,然后关闭它。问题是我无法保存添加的新数据。

我也尝试过使用 openpyxl 等其他库,但无法打开 Excel。我加载了 Excel,但如果您不打开它,它似乎没有下载新数据。

openpyxl 示例:

import os
import openpyxl

path = "C:\\Users\\...\\Desktop\\TEST_EXCEL"

for file in os.listdir(path):
    filename = os.path.join(path, file)
    if filename.endswith(".xlsx"):    
       wb = openpyxl.load_workbook(filename)
       time.sleep(60)
       wb.save(filename)

感谢您的帮助。

【问题讨论】:

    标签: python excel sas


    【解决方案1】:

    我认为您需要的模块是 win32com,代码如下:

    from win32com.client import Dispatch
    xl = Dispatch('Excel.Application')
    wb = xl.Workbooks.Open(filename)
    time.sleep(60)
    wb.Close(True)
    

    在这种情况下,wb.Close(True) 保存并关闭文件。只需将其添加到 listdir 上的循环中,它就可以工作了。 希望对你有帮助!

    【讨论】:

    • ¿ 这个库有没有一种方法可以等到数据加载完毕后再关闭?现在我睡了 60 秒,但是如果下载需要更多时间会发生什么...
    • 我对 SAS 了解不多,所以对此我无能为力 - 抱歉!你应该看看 wb.Close(True) 是否等待数据加载,在这种情况下省略 time.sleep(60) 是你所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2011-05-12
    相关资源
    最近更新 更多