Сохранить книгу Excel в Python - PullRequest
       13

Сохранить книгу Excel в Python

0 голосов
/ 31 октября 2018

Я новичок в Python, и мне нужно открыть все Excels в папке (по одному), подождать некоторое время, когда надстройка 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)])

Функция всплывающего окна открывает 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)

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 31 октября 2018

Я думаю, что для этого вам понадобится модуль 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, и он должен работать. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...