Читать текстовый документ в ASP.NET и заменять текст (Office 2003/2007) - PullRequest
0 голосов
/ 15 декабря 2009

Я использую VS 2005, asp.net 2.0.

Мне нужно прочитать документ Word (.doc) в asp.net, сделать некоторые замены и затем сгенерировать другой документ Word.

Пока все в порядке. Я сделал это на компьютере с установленным Office 2003, поэтому в VS 2005 я добавил ссылку на « Microsoft Word 11.0 Object Library ». Все работало отлично. Код для открытия / сохранения документа word: http://www.dnzone.com/go?1387

Вопрос 1. Мне нужно открыть тот же проект на компьютере, на котором установлен Office 2007, и запустить его. Когда я это делаю, он не распознает ссылки. У меня есть только возможность добавить ссылку на « Microsoft Word 12.0 Object Library ». Как я могу заставить его работать плавно на обеих машинах с минимальными усилиями? Есть ли способ сделать это?

Вопрос 2. Будет ли это приложение работать нормально при развертывании его на веб-сервере? Нужно ли регистрировать какую-либо dll или компонент на сервере или делать что-то еще, чтобы эта офисная интеграция работала?

Ответы [ 5 ]

1 голос
/ 15 декабря 2009

Сохраните много работы и используйте Word XML (доступен в Word 2002 и более поздних версиях) для создания своих шаблонов. Проверьте сгенерированный код XML, чтобы увидеть, где вы должны сделать свои замены. Совместим с Office 2002, 2003, 2007 и не требует серверного компонента.

Word XML выглядит так же, как и соответствующий файл DOC, в 99% случаев, но лучше поддерживается. Плюс поддержка всех функций Word, поэтому вы можете предпочесть его RTF.

1 голос
/ 15 декабря 2009

Вы никогда не должны использовать Word API из серверного кода. Он не поддерживается и обычно не будет работать надежно.

0 голосов
/ 16 декабря 2009

Мы обнаружили проблему, она была связана с созданием файла. Я использовал FileStream с FileMode.Open для уже существующего файла. Я изменил на FileMode.Create, чтобы создать новый файл и .. voillá! :)

Большое спасибо всем за ваши ответы, особенно Ян Чонбоум .

0 голосов
/ 15 декабря 2009

Возможно, вы захотите взглянуть на продукты Aspose. Они предназначены для работы в серверной среде (но не бесплатны)

0 голосов
/ 15 декабря 2009

Я столкнулся с этой проблемой некоторое время назад - мы закончили тем, что сохранили его как файл RTF, который все еще выходит отформатированным, а затем с использованием FileStream и .Replace (someStringValue) на основе значений ключей, таких как #DateForEventStart, так что у вас было что-то вроде это

    public void something()
    {
        StreamReader stream = new FileStream(filePath);
        string template = stream.ReadToEnd();
        template.Replace(templateKeyValue, objectValue);
    }

тогда вы можете передать это в memstream или что вам нужно. Я не знаю, возможно ли это для того, что вы делаете, но это мысль.

...