1 (изменено: yuriy2000, 2012-09-15 17:45:17)

Тема: VBA: Как заставить Word открыть doc/rtf-файл, с расширением odt

Господа, никто не сталкивался с такой проблемой:
Если документ в формате Word'a (DOC/rtf/docx) сохранить с расширением ODT (или поменять у нормального файла rtf/doc расширение на ODT, то файл в Word'e не открывается. При этом OpenOffice открывает такие файлы без проблем.


пробовал оба варианта

objWord.Documents.Open(Filename:=FilePath, Format:=wdOpenFormatAuto)
objWord.Documents.Open(Filename:=FilePath, Format:=wdOpenFormatDocument)

Выдается ошибка "Не удается открыть файл из-за ошибок его содержимого"



Поскольку я не могу изменять исходные файлы, то у меня получается открыть этот "кривой" файл  только скопировав его во временную папку и поменяв у него расширение. При этом еще приходится предварительно анализировать содержимое файла (по первым  4-м байтам).

У кого-нибудь есть иные идеи?



PS: MS Word 2007 SP3, Windows XP SP3

2

Re: VBA: Как заставить Word открыть doc/rtf-файл, с расширением odt

yuriy2000, зачем (и кому) нужно менять у документа Word расширение?

3 (изменено: yuriy2000, 2012-09-15 20:40:51)

Re: VBA: Как заставить Word открыть doc/rtf-файл, с расширением odt

alexii пишет:

yuriy2000, зачем (и кому) нужно менять у документа Word расширение?

Хороший вопрос.

К нам поступают такие файлы от службы судебных приставов. Эти файлы создаются в OpenOffice при помощи какой-то программы/макроса по некоему шаблону. Все файлы имеют расширение ODT. Моя задача обработать входящие файлы.  Извлечь из них определенную информацию.

Иногда попадаются вот такие "кривые" переименованные файлы.  Я предполагаю, что приставы иногда, перед тем как отправить файл, решают внести в него изменения при помощи Word'a... ну и сохраняют вот так вот криво.

Кстати, Word часто не может открыть и "нормальные" ODT файлы. Так вот я придумал следующее - поскольку ODT файл представляет собой zip-архив, содержащий текст в виде XML, то быстрей оказалось извлечь этот content.xml  и потом конвертировать его в HTML  через split по строке <text:p  следующим образом

фрагмент кода

sStrng1=split( UTF2Win(FSO.OpenTextFile("content.xml",1).ReadAll),"<text:p") 

oFileOut.WriteLine "<html>" 
for i=1 to UBound(sStrng1)
  oFileOut.WriteLine "<p " & replace(sStrng1(i),"text:","")
next 
oFileOut.WriteLine "</html>"

потом уже открываю файл в Word'e как html документ (wdOpenFormatWebPages) и извлекаю из него нужный текст.
Получается даже в 5-10 раз быстрей, чем открыть файл через встроенный конвертер Word'a (wdOpenFormatOpenDocumentText)