Заменить текст в документе Word через ASP.NET - PullRequest
2 голосов
/ 16 марта 2010

Как заменить строку / слово в документе Word через ASP.NET? Мне просто нужно заменить пару слов в документе, поэтому я хотел бы остаться в стороне от сторонних плагинов и взаимодействия. Я хотел бы сделать это, открыв файл и заменив текст.

Были предприняты следующие попытки:

Я создал StreamReader и Writer для чтения файла, но думаю, что я читаю и пишу в неправильном формате. Я думаю, что документы Word хранятся в двоичном формате? Если текстовые документы являются двоичными, как бы я прочитал и записал файл в двоичном формате?

    Dim template As String = Request.MapPath("documentName.doc")
    If File.Exists(template) Then
        Dim sr As New StreamReader(template)
        Dim content As String = sr.ReadToEnd()
        sr.Close()
        Dim sw As New StreamWriter(template)        
        content = content.Replace("@ T O D A Y S D A T E", Date.Now.ToString("MM/dd/yyyy"))
        sw.Write(content)
        sw.Close()
    Else

Ответы [ 4 ]

2 голосов
/ 17 марта 2010

Бинарный формат Word является собственностью Microsoft. Спецификация для чтения двоичного формата является сложной, и вам понадобится много времени, чтобы узнать о структуре документа и внутренней структуре битов и байтов. Я действительно не думаю, что вы спасете себя в любое время, если будете идти по этому пути, поэтому подумайте о следующем:

  • Использовать Open XML
  • Автоматизация Word
  • Использовать стороннюю библиотеку, такую ​​как Aspose
  • Используйте RTF, а не Док. Затем вы можете найти конкретный тег RTF с вашим текстом и заменить его другим набором текстового блока RTF. Это, вероятно, самое простое из того, что вы хотите сделать, если RTF является приемлемым форматом.

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

РЕДАКТИРОВАНИЕ: Исправлено в отношении моего первоначального комментария NDA. Это был тот случай, когда я работал над этим в 2005/6 году и не понимал, что Microsoft решила опубликовать это в последний год.

1 голос
/ 17 марта 2010

Много вариантов:

  1. Некоторые из них дорогие (Apose)
  2. Некоторые из них жесткие (двоичные форматы)
  3. Некоторые из них требуют взаимодействия (VSTO) или более новые форматы (Open XML)
  4. Некоторые из них еще не упомянуты, например,
    1. работает Word на сервере и просто писать на это (не рекомендуется MSFT, но, вероятно, ваш единственный настоящий выбор а) дешевый, б) простой
    2. OfficeWriter .
0 голосов
/ 17 марта 2010

Вы можете выполнить автоматизацию Word на сервере, чтобы легко это сделать, но этот маршрут чреват опасностью. Автоматизация не предназначена для запуска на стороне сервера, и вы обнаружите, что она регулярно зависает, когда Word выдает подсказку или окно подтверждения, ожидая ввода, который никто не может увидеть.

Вы должны пойти на компромисс, использовать автоматизацию Word и признать, что он может зависать довольно регулярно (что угодно, от ежедневного до еженедельного) или покупать стороннее решение. Я использую Aspose, и это решило много проблем.

0 голосов
/ 17 марта 2010

Если текстовые документы являются двоичными, как мне прочитать и записать файл в двоичном формате?

Они есть, и поэтому вы должны использовать стороннюю библиотеку для программирования против них.

Я хотел бы остаться в стороне от сторонних плагинов и взаимодействия

Это требование делает задачу чрезвычайно сложной. Если ваши документы в «старом формате Word» (.doc), я почти скажу, что вам не повезло. Если вы вместо этого можете использовать документы Word 2007 (.docx), вы сможете решить эту проблему, разархивировав файл (по сути, это ZIP-архив), выполните поиск / замену в содержащихся XML-файлах и снова заархивируйте документ. *

См. Также: Создание документа Word с помощью C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...