| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.IO;
- using DocumentFormat.OpenXml;
- using DocumentFormat.OpenXml.Packaging;
- using DocumentFormat.OpenXml.Wordprocessing;
- using A = DocumentFormat.OpenXml.Drawing;
- using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
- using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
- using System.Linq;
- using System.Xml;
- using System.Xml.Linq;
- namespace OfficeOpenXmlHelp.Word
- {
- /// <summary>
- /// word帮助类,完成后请调用Dispose()
- /// </summary>
- public class WordOpenXml
- {
- /// <summary>
- /// 获取的 WordprocessingDocument 对象
- /// </summary>
- private WordprocessingDocument wordDoc;
- /// <summary>
- /// 初始化一个word
- /// </summary>
- /// <param name="fileStream"></param>
- public WordOpenXml(Stream fileStream, bool isEditable)
- {
- wordDoc = WordprocessingDocument.Open(fileStream, isEditable);
- }
- /// <summary>
- /// 搜索和替换文档<w:t></w:t>的内容。
- /// 快速方便地搜索和替换。 因为它检索的字符串格式的 XML 文档,它可能不可靠。 根据正则表达式,可能会无意中替换 XML 标记并损坏文档。
- /// </summary>
- /// <param name="oldValue">查找字符串</param>
- /// <param name="newValue">替换字符串</param>
- public void Replace(string oldValue, string newValue)
- {
- Replace(new Dictionary<string, string>()
- {
- { oldValue, newValue }
- });
- }
- /// <summary>
- /// 搜索和替换文档<w:t></w:t>的内容。
- /// 快速方便地搜索和替换。 因为它检索的字符串格式的 XML 文档,它可能不可靠。 根据正则表达式,可能会无意中替换 XML 标记并损坏文档。
- /// </summary>
- /// <param name="ky">多个替换内容</param>
- public void Replace(Dictionary<string, string> ky)
- {
- string docText = string.Empty;
- //在打开文件进行编辑之后,可使用 StreamReader 对象读取该文件。
- using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
- {
- docText = sr.ReadToEnd();
- }
- foreach (var item in ky)
- {
- //创建正则表达式对象,再将该文本值替换文本
- //文本在xml中为: <w:t>Title</w:t>
- //加上前后匹配,增加可靠性
- Regex regexText = new Regex("t>" + item.Key + "</w");
- docText = regexText.Replace(docText, "t>" + item.Value + "</w");
- }
- //保存
- using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
- {
- sw.Write(docText);
- }
- }
- /// <summary>
- /// 保存+关闭
- /// </summary>
- public void Save()
- {
- wordDoc.Dispose();
- }
- }
- }
|