2016-05-12 5 views
2

Wenn Sie diesen Code verwenden:Wie kann ich das Dialogfeld "Makros/VB-Projekt" beim erneuten Speichern von xls in xlsx mit win32com.client deaktivieren?

import win32com.client as win32 

input_files = os.listdir(parent_dir) 
input_files = [parent_dir + i for i in input_files if i.endswith('.xls') and not i.endswith('.xlsx')] 
for input_file in input_files: 
    if not os.path.isfile(input_file.replace('.xls', '.xlsx')): 
     excel = win32.gencache.EnsureDispatch('Excel.Application') 
     wb = excel.Workbooks.Open(input_file) 
     wb.SaveAs(input_file + "x", FileFormat=51) # FileFormat = 51 is for .xlsx extension 
     wb.Close() # FileFormat = 56 is for .xls extension 
     excel.Application.Quit() 

auf Excel-Dateien einige Makros/VB-Projekt oft messagebox zeigt sich mit Warnung, dass alle Makros/VB-Projekt verloren gehen enthält, würde ich sie beantworten irgendwie automatisch gerne, für Beispiel: "Ja" oder vielleicht gibt es einen Parameter für SaveAs Funktion oder Einstellungen für

win32.gencache.EnsureDispatch ('Excel.Application')?

Jetzt kann ich einfach Dateien als xlsm mit FileFormat = 51 speichern, aber aus Sicherheitsgründen möchte ich dies nicht tun, ich brauche diese Makros/VB-Projekte wirklich nicht in meinen Dateien.

Versucht excel.DisplayAlerts = False - nicht geholfen.

Denken Sie auch an etwas wie pywinauto, aber vielleicht ist es zu viel und vielleicht gibt es elegantere Lösung?

+0

Versuchen Sie, zuerst die Makros/Formulare und alle VBAs, die hinter den Arbeitsmappen-/Arbeitsblatt-Objekten sitzen, zu entfernen. Dann sollten Sie den Dialog nicht bekommen. Stellen Sie sicher, dass Sie programmatischen Zugriff auf den VBE haben. – steveo40

+0

Kurzer Hinweis - das Speichern als xlsm bringt diesen Dialog nicht, auch FileFormat = 52 ist das xlsm-Format. – Hellohowdododo

Antwort

0

Mit

wb.Close(True) #if you need to save .xls file also 

oder

wb.Close(False) # if you not decide to save .xls file 

Auf der anderen Seite verwendet, kann es hat andere Datei geöffnet, so dass, wenn Sie excel.Application.Quit() verwenden und solche Datei nicht speichern, Excel-Bestätigungsdialog zeigen vor dem Schließen.

Verwandte Themen