Поиск и замена текста в потоке памяти в C # .NET - PullRequest
2 голосов
/ 08 октября 2009

Я загрузил поток памяти с документом Word, и я хочу иметь возможность изменять определенный текст в потоке памяти и сохранять его обратно в документ Word, например, функции поиска и замены. Пожалуйста, кто-нибудь может мне помочь с этим, так как я не хочу использовать библиотеки Word Interop. У меня уже есть код для загрузки и сохранения документа, см. Ниже. Проблема заключается в том, что если я преобразую строку памяти в строку и использую метод замены строки, когда я сохраняю строку, все форматирование в документе word теряется, а когда я открываю документ, все, что он показывает, это черные поля повсюду.

        private void ReplaceInFile(string filePath, string searchText, string replaceText)
    {
        byte[] inputFile = File.ReadAllBytes(filePath);
        MemoryStream memory = new MemoryStream(inputFile);

        byte[] data = memory.ToArray();

        string pathStr = Request.PhysicalApplicationPath + "\\Docs\\OutputDocument.doc";
        FileInfo wordFile = new FileInfo(pathStr);
        FileStream fileStream = wordFile.Open(FileMode.Create, FileAccess.Write, FileShare.None);

        fileStream.Write(data, 0, data.Length);

        fileStream.Close();

        memory.Close();
    }

Я скопировал код из примера кода в Интернете. Вот почему использовался поток памяти, так как я понятия не имел, как это сделать. Моя проблема в том, что компания, в которой я работаю, не хочет использовать слово interop, поскольку иногда они обнаруживают, что слово может иногда отображать всплывающие диалоговые окна, которые препятствуют выполнению закодированной функциональности. Вот почему я хочу посмотреть на способы достижения функциональности слияния почты, но программным способом. Я сделал нечто очень похожее на то, что хочу сделать здесь много лет назад, но в Delphi нет C #, и я обычно терял код. Так что если кто-то может пролить свет на это, я был бы признателен.

Ответы [ 2 ]

5 голосов
/ 08 октября 2009

У вас будет для использования библиотек взаимодействия Word - или, по крайней мере, что-то подобное. Не похоже, что документы Word - это просто текстовые документы - это двоичные файлы. Преобразование байтов в строку и замена таким образом приведут к поломке документа.

С новыми открытыми форматами вы можете иметь возможность писать свой собственный код для их анализа, но это будет значительно сложнее, чем использование библиотеки.

0 голосов
/ 13 апреля 2011

Лучше всего конвертировать файл в OOXML - тогда это XML-файл, который вы можете программно обновить, используя строку find / replace, System.XML или LINQ.

(см. http://blogs.msdn.com/b/ericwhite/archive/2008/09/19/bulk-convert-doc-to-docx.aspx для получения дополнительной информации о процессе преобразования на стороне сервера.)

...