Найти и заменить слова в документе (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 = "в

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы