2016-05-12 13 views
2

当使用此代码:如何使用win32com.client将xls重新保存到xlsx时禁用/ autoanswer有关宏/ VB项目的对话框?

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

含有一些宏Excel文件/ VB项目往往消息框显示了警告,所有的宏/ VB项目都将丢失,我想以某种方式自动回答这个问题,对于例如,“是”,或者可能有一些参数用于SaveAs功能或设置

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

现在我只需将文件重新保存为带有FileFormat = 51的xlsm,但出于某些安全原因,我不想这样做,我真的不需要在我的文件中使用此宏/ VB项目。

试过excel.DisplayAlerts = False - 没有帮助。

也考虑类似pywinauto的东西,但也许它矫枉过正,也许有更优雅的解决方案?

+0

尝试剥去宏/窗体以及任何坐在工作簿/工作表对象后面的VBA。那么你不应该得到对话。确保你有编程访问VBE。 – steveo40

+0

短时间通知 - 保存为xlsm不会出现在此对话框中,FileFormat = 52也是xlsm格式。 – Hellohowdododo

回答

0

使用

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

或使用

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

在另一方面,它可能有其他的文件打开,所以当你使用excel.Application.Quit()和这些文件没有保存,Excel将显示确认对话框在结束之前。

相关问题