Откройте, сохраните и закройте файл xlsx.Python

Программы на Python
Ответить
Anonymous
 Откройте, сохраните и закройте файл xlsx.

Сообщение Anonymous »

В проекте я создаю/изменяю огромное количество файлов xlsx с помощью openpyxl.
Когда я помещаю один из этих файлов на Onedrive, я не могу его открыть. Но если я открою его на своем ноутбуке с помощью libreoffice, сохраню и закрою, а затем снова перенесу на Onedrive, его можно будет редактировать онлайн.
Я хотел бы автоматизировать этот процесс с помощью сценария Python. Для каждого сгенерированного файла xlsx:
  • откройте его с помощью приложения по умолчанию
  • сохраните
  • закройте
Я пробовал использовать подпроцесс и клавиатуру, но безуспешно. Подпроцесс открывает файл, но сценарий Python останавливается, а libreoffice все еще открыт.
Вот минималистская попытка:

Код: Выделить всё

#!/usr/bin/env python

from openpyxl import Workbook
from pynput.keyboard import Key, Controller
import subprocess # pour lancer des processus
import time
from platform import system

nom_os = system().lower()
if "windows" in nom_os:
# programme = "start"
programme = r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
elif "osx" in nom_os or "darwin" in nom_os:
programme = "open"
else:
programme = "xdg-open"

fichier = r"./essai.xlsx"

durées=[3.5, .7, 1.]

classeur = Workbook()
classeur.save(fichier) # saves empty xlsx

keyboard = Controller()

# opens xlsx file
_sp_ = subprocess.Popen([programme, str(fichier)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Pause to give workbook time to fully open.
time.sleep(durées[0])
# fills first cell in xlsx file
keyboard.type('azerty')
# saves
with keyboard.pressed(Key.ctrl):
keyboard.tap('s')

# Pause et validation pour confirmer l'enregistrement en xlsx
time.sleep(durées[1])

# closes
with keyboard.pressed(Key.ctrl):
keyboard.tap('q')

# Pause to give workbook time to fully close.
time.sleep(durées[2])
_sp_.terminate()
С pyautogui:

Код: Выделить всё

from openpyxl import Workbook
import subprocess # pour lancer des processus
import time
from platform import system

import pyautogui

nom_os = system().lower()
if "windows" in nom_os:
# programme = "start"
programme = r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
elif "osx" in nom_os or "darwin" in nom_os:
programme = "open"
else:
programme = "xdg-open"

fichier = r"./essai.xlsx"

durées=[5, .7, 1.]

classeur = Workbook()
classeur.save(fichier) # saves empty xlsx

_sp_ = subprocess.Popen([programme, str(fichier)], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Pause to give workbook time to fully open.
time.sleep(durées[0])
pyautogui.click()
pyautogui.write("azerty")
pyautogui.press('enter')
time.sleep(durées[1])
pyautogui.hotkey('ctrl', 's')
pyautogui.hotkey('ctrl', 'q')
time.sleep(durées[2])
В обоих случаях поведение одинаковое:
  • Файл xlsx открывается в libreoffice (фокус на этом окне)
  • но сценарий Python продолжается без взаимодействия с клавиатурой.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -xlsx-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»