C# Word Interop Сохранение документов с помощью пакета совместимости Word 2003 +

На моем компьютере разработчика у меня установлен Office 2007 на Win7 x64.

Целевыми машинами являются пакет обеспечения совместимости Office 2003 + (для чтения / записи документов и т. Д.), Работающий на WinXP x64.

Моя программа, среди прочего, открывает / сохраняет как команды для файлов doc, преобразовывая их в docx.

Он прекрасно работает на моей машине, но, к сожалению, дает файлы нулевого размера на целевых машинах. Не выдается никаких исключений, похоже, что все работает нормально, за исключением случаев, когда я смотрю на выходной файл, он имеет нулевую длину.

Есть идеи, почему это происходит, и как обойти это?

В крайнем случае я бы написал некрасивый макрос Word/PowerPoint, который открывает документ и сохраняет его. Я бы предпочел, чтобы все происходило автоматически из моей программы без открытия окна Word/PowerPoint.

2 ответа

Решение

Нет необходимости автоматизировать Word, который довольно медленный и ломкий из-за всплывающих сообщений. Возможно, вы захотите взглянуть на Microsoft Office File Converter (ofc.exe), который, однако, имеет излишне сложный пользовательский интерфейс.

Самый простой и быстрый способ - легко конвертировать из.doc в.docx, используя следующую команду:

"C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme <input file> <output file>

где <входной файл> и <выходной файл> должны быть полными путями.

Команду можно легко применить к нескольким документам, используя for:

for %F in (*.doc) do "C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme "%F" "%Fx"

Вы можете запустить эту команду из C#, используя Process.Start метод.

Вы уверены, что SAVE или SAVEAS, которые вы используете, задают правильные параметры для принудительного сохранения файла в формате DOCX? В версии 2007 она встроена, а в версии 2003, я полагаю, вам нужно указать формат сохранения другим способом, явно указав ему использовать соответствующий фильтр из пакета совместимости.

Другие вопросы по тегам