Вопрос по openxml – docx нерушимые слова

2

Я пытаюсь заменить слова в файле DOCX, как описаноВот:

public static void SearchAndReplace(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        string docText = null;
        using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
        {
            docText = sr.ReadToEnd();
        }

        Regex regexText = new Regex("Hello world!");
        docText = regexText.Replace(docText, "Hi Everyone!");

        using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
        {
            sw.Write(docText);
        }
    }
}

Тот'работает нормально, за исключением того, что иногда для SomeTest в документе вы получите что-то вроде:

    
        Some
    



    
        
        
        
    
    
        Test
    

И конечно замена не удалась. Возможно, есть обходной путь, чтобы сделать некоторые слова неразборчивыми в docx? Или, может быть, яя делаю заменить неправильно?

Ваш Ответ

1   ответ
3

го документа перед выполнением преобразований. Вы можете использоватьOpenXml Powertools сделать это.

Пример кода для нормализации xml

 using (WordprocessingDocument doc =
            WordprocessingDocument.Open("Test.docx", true))
        {
            SimplifyMarkupSettings settings = new SimplifyMarkupSettings
            {
                NormalizeXml = true, // Merges Run's in a paragraph with similar formatting
                // Additional settings if required
                AcceptRevisions = true,
                RemoveBookmarks = true,
                RemoveComments = true,
                RemoveGoBackBookmark = true,
                RemoveWebHidden = true,
                RemoveContentControls = true,
                RemoveEndAndFootNotes = true,
                RemoveFieldCodes = true,
                RemoveLastRenderedPageBreak = true,
                RemovePermissions = true,
                RemoveProof = true,
                RemoveRsidInfo = true,
                RemoveSmartTags = true,
                RemoveSoftHyphens = true,
                ReplaceTabsWithSpaces = true
            };
            MarkupSimplifier.SimplifyMarkup(doc, settings);
        }

Это упростит разметку документа Open Xml, чтобы упростить дальнейшие преобразования для работы с документом. Я всегда использую его перед программной работой с открытым XML-документом.

Более подробную информацию об использовании этих инструментов можно найтиВот и хорошая статья в блогеВот.

Работает на разметке Open xml, ничего не меняет в плане вывода документов. Конечный документ по-прежнему выглядит так же. Но вы должны знать об изменениях, которые он собирается внести, например. Если вы используетеRemoveBookmarks=true Вы получите документ без закладок. Но нормализация xml выигралаНичего не изменить в документе, но это нормализует и объединяет прогоны с абзацем. Сравните xml обоих документов, чтобы увидеть, работает ли он с вашими требованиями. Flowerking
Итак, если я использую только NormalizeXml = true, тогда заменяю вещи и записываю их обратно - это не должноне так, как выглядит доктор? ren

Похожие вопросы