[PYTHON] Générer une instance Excel compatible avec les compléments avec xlwings

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.

0. Environnement

Vérifiez ci-dessous.

1. Problèmes

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.

2. Solution

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()

référence

Recommended Posts

Générer une instance Excel compatible avec les compléments avec xlwings
Créez rapidement un fichier Excel avec Python #python
Créer un environnement avec virtualenv
Créer une API avec Django
Créez une tranche d'âge avec les pandas
Créer une application en classifiant avec Pygame
Créer une visionneuse de traitement d'image avec PySimpleGUI
Créer un écran de mise à jour avec Django Updateview
Créez une application de mots anglais avec python
Créez un fichier msi évolutif avec cx_Freeze
Créez une application qui devine les étudiants avec Python
Créer un programme académique avec optimisation des combinaisons
Créez une application de composition d'images avec Flask + Pillow
Créer une image avec des caractères avec python (japonais)
Créer une instance de GPU AWS pour entraîner StyleNet
Envoyer un e-mail avec Excel en pièce jointe en Python
Créez rapidement un serveur API avec Python + Falcon
Excel avec Python
Créer un serveur local GIF animé avec Python + Flask
Exécutez Python à partir d'Excel VBA avec xlwings et un supplément de tutoriel
environnement en ligne de serveur de code (3) Lancer une instance EC2 avec Boto3
Créez un tweet idole avec Keras LSTM (génération de phrases)
Un moyen simple de créer un module d'importation avec jupyter
Créez une application qui devine les étudiants avec la version python-GUI
Créer un nombre aléatoire avec une densité de probabilité arbitraire
Créez un environnement Open AI Gym avec Bash sur Windows 10
Tapez après avoir lu un fichier Excel avec pandas read_excel
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
Arrêter une instance avec une balise spécifique dans Boto3
Gérez Excel avec python
Créez des jeux avec Pygame
Lire Excel avec openpyxl
Utiliser Excel avec Python (1)
Utiliser Excel avec Python (2)
Créez un environnement pour "Deep Learning from scratch" avec Docker
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Créez un exemple de scène semblable à un jeu avec juste le script Blender 2.80
Créons une application qui authentifie OIDC avec Azure AD
Introduction à Python pour les utilisateurs de VBA - Appeler Python depuis Excel avec xlwings -
Créer une application Todo avec Django ① Créer un environnement avec Docker
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy