Не удалось сохранить обновленную версию Excel - PullRequest
0 голосов
/ 19 июня 2019

У меня есть лист Excel, который имеет соединение для передачи данных с PowerQuery. Обычно я нажимал «Обновить все», чтобы обновить данные. Я хочу автоматизировать это и написал скрипт Python для этого.

Однако в Excel я нашел в окне «Свойства подключения» параметр «Обновить при открытии». Теперь, когда я открываю лист, автоматически запускается обновление и данные обновляются.

Из кода Python я открываю этот лист и вставляю команду режима сна, чтобы он ожидал 30 секунд, пока лист не обновится автоматически. После этого я звоню «Сохранить как», чтобы сохранить обновленный лист под другим именем.

Я использую код ниже:

import win32com.client
import time

# Start an instance of Excel
xlapp = win32com.client.DispatchEx("Excel.Application")

# Open the workbook in said instance of Excel
wb = xlapp.workbooks.open("test.xlsx")

# Optional, e.g. if you want to debug
# xlapp.Visible = True

time.sleep(30)
wb.SaveAs("New.xlsx")

# Quit
xlapp.Quit()

Я заметил, что даже после «Сохранить как» значения данных не обновляются. Если я открою Excel напрямую, без скрипта Python, обновление будет выполнено, а затем я вручную нажму кнопку Сохранить Это обновляет. Но с приведенным выше кодом, он не сохраняет обновленную версию.

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 19 июня 2019

Вы пробовали это, я думаю, что в приведенном выше коде отсутствует команда wb.RefreshAll(): Обновить внешние данные Excel с помощью Python

import win32com.client
import time 
# Start an instance of Excel
xlapp = win32com.client.DispatchEx("Excel.Application")

# Open the workbook in said instance of Excel
wb = xlapp.workbooks.open("test.xlsx")

# Optional, e.g. if you want to debug
# xlapp.Visible = True

# Refresh all data connections.
wb.RefreshAll()
time.sleep(30)
wb.Save()

# Quit
xlapp.Quit()
...