Annuler l'événement proche d'Excel en utilisant python et win32com

Actuellement, j'essaie d'annuler l'événement proche d'Excel en utilisant Python et Win32com. J'ai déjà réussi à résoudre ce problème avec IronPython il y a un mois. Mais pour d'autres raisons du département de mes entresockets, cela devrait également être possible avec Python. Suivi vous verrez deux extraits. Le premier contiendra le code IronPython actif

import clr clr.AddReference("Microsoft.Office.Interop.Excel") clr.AddReference("System.Windows.Forms") from Microsoft.Office.Interop import Excel from System.Windows.Forms import Form, Application, MessageBox, MessageBoxButtons, MessageBoxIcon, DialogResult class CloseEventTry(Form): def __init__(self): excel = Excel.ApplicationClass() excel.Visible = True excel.DisplayAlerts = False self.workbooks = excel.Workbooks.Add() self.Text = "Dummy GUI Window" #link "BeforeCloseEvent" to the "beforeClose" method self.workbooks.BeforeClose +=Excel.WorkbookEvents_BeforeCloseEventHandler(self.beforeClose) def beforeClose(self, cancel): print type(cancel) #Type: 'StrongBox[bool] choice = MessageBox.Show("Close Excel", "Close", MessageBoxButtons.YesNo, MessageBoxIcon.Information) if choice == DialogResult.Yes: cancel.Value = False #do't cancel the close action self.Close() elif choice == DialogResult.No: cancel.Value = True #prevent excel from closing Application.Run(CloseEventTry()) 

La seconde contiendra la version avec Python et Win32com. Celui-ci est basé sur mon extrait IronPython et l'exemple de ce lien

  • parsing des documents excel avec python
  • Images et tables liées à MS Word
  • Puis-je download une feuille de calcul vers MediaWiki
  • Les colors du duplicata de la colonne Excel peuvent-elles être mises en surbrillance avec deux colors?
  • Excel VBA Copier l'opération dans la boucle est extrêmement lent
  • Pourquoi est-ce que je continue d'avoir une exception COM lors de l'utilisation de FormulaArray
  • Events in Microsoft Word and Excel

     import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form, Application, MessageBox, MessageBoxButtons, MessageBoxIcon, DialogResult import win32com.client as win32 #workbook event handler class. Needed according to this example https://win32com.goermezer.de/microsoft/office/events-in-microsoft-word-and-excel.html class WorkBookEvents(object): def OnBeforeClose(self, cancel): print(type(cancel)) #Type: class 'bool' choice = MessageBox.Show("Close Excel", "Close", MessageBoxButtons.YesNo, MessageBoxIcon.Information) if choice == DialogResult.Yes: #do't cancel the close action => raises AtsortingbuteError: 'bool' object has no atsortingbute 'Value' Exception cancel.Value = False self.Close() elif choice == DialogResult.No: #prevent excel from closing => raises AtsortingbuteError: 'bool' object has no atsortingbute 'Value' Exception cancel.Value = True class CloseEventTry(Form): def __init__(self): excel = win32.DispatchEx('Excel.Application') excel.Visible = True # makes the Excel application visible to the user excel.DisplayAlerts = False self.Text = "Dummy GUI Window" self.workbooks = excel.Workbooks.Add() #define event handler according to this example https://win32com.goermezer.de/microsoft/office/events-in-microsoft-word-and-excel.html self.workbooks = win32.DispatchWithEvents(self.workbooks, WorkBookEvents) Application.Run(CloseEventTry()) 

    Comme vous verrez, je pourrais me connecter à l'événement "OnBeforeClose", mais je ne peux pas annuler l'événement close comme je l'ai fait avec la version IronPython. Comme mentionné dans le dernier commentaire de l'extrait de code, la version Python soulève une exception AtsortingbuteError. En outre, vous pouvez également voir que les types de la variable "annuler" nécessaire des gestionnaires d'events ont deux types différents. Dans la version IronPython, il s'agit d'un "StrongBox [bool]". D'autre part, le type de la version de Python est un type "bool" de class "courant" (ce qui explique l'exception). De cette façon, j'ai essayé de simplement taper

     cancel = True #prevent excel from closing 

    Mais en utilisant cette façon, excel se ferme de toute façon. J'ai également fait des searchs mais je n'ai pas pu find une solution pour ce problème. Ma supposition est qu'il existe une sorte d'emballage nécessaire?

  • Données Nitro et expression régulière (Python)
  • Word VBA Insertion de signets et de mise en forme
  • Concatenant des données dans différentes colonnes dans une seule colonne (pandas, python)
  • excel avec un moteur SAS
  • Multiplier chaque cellule dans une plage par une valeur
  • Appliquer la règle au formatting conditionnel
  • Open Spreadsheet Partage de tableaux Microsoft Excel VBA Formulas et Excel Charts Tips.