WordOpenXml.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Text.RegularExpressions;
  5. using System.IO;
  6. using DocumentFormat.OpenXml;
  7. using DocumentFormat.OpenXml.Packaging;
  8. using DocumentFormat.OpenXml.Wordprocessing;
  9. using A = DocumentFormat.OpenXml.Drawing;
  10. using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
  11. using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
  12. using System.Linq;
  13. using System.Xml;
  14. using System.Xml.Linq;
  15. namespace OfficeOpenXmlHelp.Word
  16. {
  17. /// <summary>
  18. /// word帮助类,完成后请调用Dispose()
  19. /// </summary>
  20. public class WordOpenXml
  21. {
  22. /// <summary>
  23. /// 获取的 WordprocessingDocument 对象
  24. /// </summary>
  25. private WordprocessingDocument wordDoc;
  26. /// <summary>
  27. /// 初始化一个word
  28. /// </summary>
  29. /// <param name="fileStream"></param>
  30. public WordOpenXml(Stream fileStream, bool isEditable)
  31. {
  32. wordDoc = WordprocessingDocument.Open(fileStream, isEditable);
  33. }
  34. /// <summary>
  35. /// 搜索和替换文档<w:t></w:t>的内容。
  36. /// 快速方便地搜索和替换。 因为它检索的字符串格式的 XML 文档,它可能不可靠。 根据正则表达式,可能会无意中替换 XML 标记并损坏文档。
  37. /// </summary>
  38. /// <param name="oldValue">查找字符串</param>
  39. /// <param name="newValue">替换字符串</param>
  40. public void Replace(string oldValue, string newValue)
  41. {
  42. Replace(new Dictionary<string, string>()
  43. {
  44. { oldValue, newValue }
  45. });
  46. }
  47. /// <summary>
  48. /// 搜索和替换文档<w:t></w:t>的内容。
  49. /// 快速方便地搜索和替换。 因为它检索的字符串格式的 XML 文档,它可能不可靠。 根据正则表达式,可能会无意中替换 XML 标记并损坏文档。
  50. /// </summary>
  51. /// <param name="ky">多个替换内容</param>
  52. public void Replace(Dictionary<string, string> ky)
  53. {
  54. string docText = string.Empty;
  55. //在打开文件进行编辑之后,可使用 StreamReader 对象读取该文件。
  56. using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
  57. {
  58. docText = sr.ReadToEnd();
  59. }
  60. foreach (var item in ky)
  61. {
  62. //创建正则表达式对象,再将该文本值替换文本
  63. //文本在xml中为: <w:t>Title</w:t>
  64. //加上前后匹配,增加可靠性
  65. Regex regexText = new Regex("t>" + item.Key + "</w");
  66. docText = regexText.Replace(docText, "t>" + item.Value + "</w");
  67. }
  68. //保存
  69. using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
  70. {
  71. sw.Write(docText);
  72. }
  73. }
  74. /// <summary>
  75. /// 保存+关闭
  76. /// </summary>
  77. public void Save()
  78. {
  79. wordDoc.Dispose();
  80. }
  81. }
  82. }