Обрабатывать окно сообщения Excel из Python, используя Win32com - PullRequest
0 голосов
/ 06 марта 2011

Я пытаюсь обработать некоторые файлы, которые должны были быть файлами xls, но оказывается, что они являются чем-то другим (согласно некоторой помощи, которую я получил на плате python-excel, это файлы веб-архива или (веб-страница с одним файлом ( * .mht, * .mhtml)). Я могу открыть файлы в Excel, но я получаю сообщение, которое должно быть отклонено, прежде чем я смогу двигаться вперед. Сообщение: Файл, который вы пытаетесь открыть filename.xls, находится в другой формат, чем указано в расширении файла. Прежде чем открывать файл, убедитесь, что файл не создан и находится из надежного источника. Хотите открыть файл?

Если я нажму да, файл откроется и будет выглядеть как книга Excel. Некоторые имена листов усекаются. Конечно же, когда я нажимаю «Сохранить», в качестве формата по умолчанию отображается веб-страница с одним файлом.

Теперь, если я сохраню и выберу формат Excel 97-2003, переименую его в новое имя и нажму кнопку «Сохранить», после чего файл откроется в 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

Я нашел ссылку на атрибут, называемый CheckCompatibility. Кажется, это атрибут объекта книги. И я думаю, я не могу использовать его в форме

srce.CheckCompatibility='False' 

потому что я не сохраняю объект srce, я сохраняю некоторый тип его копии ??

Вернуться к минам.

Ложь Надеюсь, что я не добился успеха, когда попробовал srce.CheckCompatibility = 'False'

Извините за путаницу

Ну, теперь я запутался даже больше, чем обычно, это поведение странно

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 еще не знает, какие атрибуты он имеет, он принимает назначение, но не вводится в действие, пока некоторые не произойдут? Если я звучу глупо, это нормально.

1 Ответ

4 голосов
/ 06 марта 2011

Пожалуйста, смотрите мой ответ на ваш другой вопрос по этому вопросу.

Причина, по которой он не отображает диалоговое окно для второго вызова SaveAs(...), заключается в том, что формат файла не изменяется при втором вызове, формат файла изменяется только при первом вызове.

То, что вы хотите, это добавить

>>> xl.DisplayAlerts = False

перед звонком SaveAs().

...