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