Найти и заменить слова в документе (doc) без Microsoft.Office.Interop.Word - C#
Формулировка задачи:
Добрый день!
Существует ли способ с помощью оного я мог бы найти и заменить слова в файле (doc) не используя СОМ библиотеку Word.
Такая необходимость вызвана тем, что данный код предназначен для СРМ системы (MS Dynamics), и плагин, который использует данный код валится, консольное приложение работает нормально, а вот с плагином проблема.
У меня есть шаблон файла, и мне надо по ключевым словам сделать замену.
СОМ библиотека валится, и для СРМ платформы, и, как выяснилось с АSP те же проблемы.
Решение задачи: «Найти и заменить слова в документе (doc) без Microsoft.Office.Interop.Word»
textual
Листинг программы
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml.Office2010.Word; using System.IO.Packaging; using System.IO; namespace SearchCheckBoxControl { class Program { static void Main(string[] args) { bool Flag = true; using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\temp\DRAFT.docx", true)) { foreach (var cc in doc.ContentControls()) { SdtProperties props = cc.Elements<SdtProperties>().FirstOrDefault(); Tag tag = props.Elements<Tag>().FirstOrDefault(); if (tag != null) { switch (tag.Val.Value) { case "Test": if (Flag == true) {props.Check();} else {props.UnCheck();} doc.MainDocumentPart.Document.Save(); break; } } } } } } } public static class ContentControlExtensions { public static IEnumerable<OpenXmlElement> ContentControls( this OpenXmlPart part) { return part.RootElement .Descendants() .Where(e => e is SdtBlock || e is SdtRun || e is SdtCell); } public static IEnumerable<OpenXmlElement> ContentControls( this WordprocessingDocument doc) { foreach (var cc in doc.MainDocumentPart.ContentControls()) yield return cc; foreach (var header in doc.MainDocumentPart.HeaderParts) foreach (var cc in header.ContentControls()) yield return cc; foreach (var footer in doc.MainDocumentPart.FooterParts) foreach (var cc in footer.ContentControls()) yield return cc; if (doc.MainDocumentPart.FootnotesPart != null) foreach (var cc in doc.MainDocumentPart.FootnotesPart.ContentControls()) yield return cc; if (doc.MainDocumentPart.EndnotesPart != null) foreach (var cc in doc.MainDocumentPart.EndnotesPart.ContentControls()) yield return cc; } public static void Check(this SdtProperties props) { SdtContentCheckBox chkBox = props.Descendants<SdtContentCheckBox>().FirstOrDefault(); chkBox.Checked.Val.Value = OnOffValues.True; Text t = props.Parent.Descendants<Text>().FirstOrDefault(); t.Text = "в
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д