使用Win32com从Python内部处理Excel消息框

我试图处理一些本应该是xls文件的文件,但事实certificate它们是别的东西(根据我在python-excel板上获得的一些帮助,这些文件是Web Archive文件或(单文件网页(* .mht ,* .mhtml))。我可以使用Excel打开这些文件,但是我得到一条消息,在我可以继续前进之前,必须先解除消息,消息是: – 正在尝试打开的文件filename.xls的格式与由文件扩展名指定。在打开文件之前,确认文件没有被修复并且来自可信来源。是否要打开文件?

如果我点击是,文件打开,它看起来像一个Excel工作簿。 一些表名被截断。 果然,当我点击保存为默认格式,显示的是单个文件的网页。

现在,如果我保存并selectExcel 97-2003格式,重命名为我的新名称,并点击保存button该文件,然后打开与Excel中,没有未来的问题。

我一直在尝试弄清楚如何编写一些代码来打开并保存这些文件作为真正的xls文件,所以我不需要有人在海外打开并保存它们。

我已经非常接近了,但最后一个问题仍然存在,当我用一个新的文件格式保存它时,我得到了一个警告框,警告我会有一些失真的保真度。 我不知道如何抑制它,并接受失真的保真度?

这里是补丁拼凑在一起,似乎工作

import win32com.client xl=win32com.client.Dispatch('Excel.Application') xl.visible=0 # I have noticed that if I don't set visible to 0 I can't get any response srce=xl.Workbooks.Open(r'c:\testdd.xls') # testdd is my file that is evidently really not an excel file srce.SaveAs(r'c:\newtttxt2.xls',FileFormat=1) # this is when the message box pops up 

我find了称为CheckCompatibility的解剖的参考。 它似乎是一个工作簿对象的属性。 我想我不能在表单中使用它

 srce.CheckCompatibility='False' 

是因为我不保存srce对象,我正在保存一些types的副本?

回到地雷。

假希望我没有成功,当我尝试srce.CheckCompatibility ='假'

对不起,有任何困惑

那么现在我比平常更加困惑,这种行为很奇怪

 srce=xl.Workbooks.Open(r'c:\testdd.xls') # I open the file srce.CheckCompatibility='False' # I try to assign the attribute to srce srce.SaveAs(r'c:\newtttxt7865.xls',FileFormat=1) #when I SaveAs the compatibility dialog asks if I want to continue >>> 'asked' # I put this here to reinforce the fact that I was asked 'asked' >>> srce.CheckCompatibility='False' # again I try to assign the attribute >>> srce.SaveAs(r'c:\newtttxt78653.xls',FileFormat=1) # I try to save it again >>> 'did not ask' #it saves this time w/o asking 'did not ask' >>> 

我想知道如果我添加一个make.py文件中描述的COM帮助,如果这将被解决? 我开始怀疑这个问题是不是srce不知道它有什么属性,它接受这个任务,但是直到有些事情发生之前它不会被使用。 如果我听起来很愚蠢,那就好了。

请参阅我对这个问题的其他问题的回答。

第二次调用SaveAs(...)不显示对话框的原因是文件格式在第二次调用时没有变化,文件格式只在第一次调用时发生变化。

你想要的是添加

 >>> xl.DisplayAlerts = False 

在调用SaveAs()之前。