C'est trop de niche, mais je présenterai les problèmes lors de la création d'une instance Excel avec xlwings et comment les résoudre.
Vérifiez ci-dessous.
Utilisez xw.apps.add ()
ou xw.App ()
pour générer une instance Excel avec xlwings. Cependant, cette méthode présente les problèmes suivants.
Si vous ouvrez uniquement Excel sans ouvrir le classeur (démarrez-le à partir du menu Démarrer), le complément se chargera normalement.
Créez une instance Excel à partir du shell et passez-la à xlwings sans utiliser xw.apps.add ()
ou xw.App ()
import re
import subprocess
import time
from pathlib import Path
import xlwings as xw
def get_xl_path() -> Path:
#Une fonction qui renvoie le chemin d'installation d'Excel
subprocess_rtn = (
subprocess
.run(['assoc','.xlsx'], shell=True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
.stdout.decode("utf8")
)
assoc_to = re.search('Excel.Sheet.[0-9]+', subprocess_rtn).group()
subprocess_rtn = (
subprocess
.run(['ftype', assoc_to], shell=True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
.stdout.decode('utf-8')
)
xl_path = re.search('C:.*EXCEL.EXE', subprocess_rtn).group()
return Path(xl_path)
def xw_apps_add_fixed() -> xw.App:
#Fonction pour générer une instance Excel
xl_path = get_xl_path()
num = xw.apps.count
pid = subprocess.Popen([str(xl_path),'/e']).pid
#Attendez qu'il soit reconnu par xlwings
while xw.apps.count == num:
time.sleep(1)
#Attendez d'être disponible chez xlwings
while True:
try:
xw.apps[pid].activate()
break
except:
time.sleep(1)
return xw.apps[pid]
app = xw_apps_add_fixed()
Recommended Posts