Die Verwendung von Python zu Injizieren Makros in Tabellenkalkulationen
Ich habe ein makro, ich möchte eine Reihe von existierenden Tabellen zu verwenden. Das problem ist nur, dass es so viele Tabellen, dass es wäre zu zeitaufwendig, um es mit der hand!
Habe ich geschrieben, ein Python-Skript, um den Zugriff auf die benötigten Dateien mit pyWin32, aber ich kann nicht scheinen, um herauszufinden, einen Weg, es zu benutzen, fügen Sie das makro in.
Einer ähnlichen Frage diese Antwort gegeben hat (es ist kein Python, aber es sieht aus wie es noch verwendet COM), aber mein COM-Objekt scheint es nicht zu haben ein Mitglied namens VBProject:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = False
Set objWorkbook = objExcel.Workbooks.Open("C:\scripts\test.xls")
Set xlmodule = objworkbook.VBProject.VBComponents.Add(1)
strCode = _
"sub test()" & vbCr & _
" msgbox ""Inside the macro"" " & vbCr & _
"end sub"
xlmodule.CodeModule.AddFromString strCode
objWorkbook.SaveAs "c:\scripts\test.xls"
objExcel.Quit
EDIT: Link zu der ähnlichen Frage verwiesen wird: Einschleusen und ausführen von Excel-VBA-code in Tabellenkalkulation empfangen von externen Quelle
Ich auch vergessen zu erwähnen, dass, obwohl dies nicht Python, ich hatte gehofft, dass ähnlich wie Objekt-Mitgliedern zur Verfügung stehen würde, um mich über die COM-Objekte.
- "Eine ähnliche Frage diese Antwort gegeben hat" Einen link der hier noch fehlt, ist es nicht?
- Gut, mit zu beginnen, dein Beispiel-code ist auch nicht Python; ich bin mir ziemlich sicher, es ist Visual Basic.
- Ich habe geändert meine Frage!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der code umgewandelt. Sie können entweder die win32com oder comtypes Pakete.
win32com
undcomtypes
. Im Allgemeinen, wenn Sie würde Sie nutzencomtypes
vswin32com
?ComTypes
.Als ich kämpfte auch einige Zeit, um dieses Recht zu bekommen, werde ich Ihnen ein weiteres Beispiel soll die Arbeit mit Excel 2007/2010/2013 ist
xlsm
- format. Es ist nicht viel Unterschied zu dem Beispiel oben, es ist nur etwas einfacher, ohne die Schleife über verschiedene Dateien und mit mehr Kommentaren enthalten. Neben der makro-Quellcode geladen wird aus einer Textdatei anstatt der hart-Programmierung in Python-Skript.Denken Sie daran anzupassen, die Datei-Pfade am Anfang des Skripts an Ihre Bedürfnisse an.
Darüber hinaus, denken Sie daran, dass Excel 2007/2010/2013 nur ermöglicht das speichern von Arbeitsmappen mit Makros, die in der
xlsm
- format, nicht inxlsx
. Beim einfügen eines Makros in einexlsx
- Datei, werden Sie aufgefordert, es zu speichern in einem anderen format oder das makro nicht in die Datei aufgenommen werden.Und nicht zuletzt, überprüfen Sie, dass Excel die option zum ausführen von VBA-code von außerhalb der Anwendung aktiviert ist (was standardmäßig deaktiviert aus Sicherheitsgründen), andernfalls bekommen Sie eine Fehlermeldung.
Dies zu tun, öffnen Sie Excel, und gehen Sie zu
Datei -> Optionen -> Trust-Center -> Trust-Center-Einstellungen -> Makro-Einstellungen -> aktivieren-Häkchen auf
Trust access to the VBA project object model
.Was @Dirk und @dilbert erwähnt, funktioniert Super. Sie können auch hinzufügen, dieses Stück code wird programmgesteuert Zugriff auf das VBA-Objekt-Modul'
Möchte ich noch hinzufügen. Ich hatte Schwierigkeiten versuchen zu analysieren, durch jeden .xlsm Datei in meinem Ordner. Ich habe herausgefunden wie es mit glob und Formatierung einer with-Anweisung innerhalb einer for-Anweisung. Ich bin neu in der Programmierung, so bitte entschuldigen Sie mich, wenn ich mich mit falschen Terminologie. Hoffe, das hilft anderen. Danke.
Nun kann ich ein makro über alle .xlsm Datei in meinem Ordner ohne zu öffnen excel.