学习C#调用OpenXml操作word文档的基本用法(28:学习文本类)

  文本类Text是openxml中用于保存纯文本内容的核心类,命名空间为DocumentFormat. OpenXml.Wordprocessing,对应document.xml文件内的<w:t>元素,负责保存word文档里真正可读、可编辑的文字信息。

  在openxml的wrod文档结构里,文本不能直接放在段落(Paragraph)下,必须按照段落类(Paragraph)、文本运行类(Run)、文本类(Text)的层级关系创建对象,Text对象保存文本内容,文本格式放在文本运行类中,而段落格式在放在段落类中,最简单的wrod文档的xml结构如下所示(参考文献6)。

  文本类Text的类继承链为OpenXmlElement -> OpenXmlLeafElement -> OpenXmlLeafTextElement -> TextType -> Text,其主要属性包括以下两个:
  1)Text属性:保存纯文本字符串内容;
  2)Space属性:设置文本中空白字符的处理方式(应该主要针对文本两头的空白字符),从枚举值SpaceProcessingModeValues内取值,值为Default会合并连续空格,值为Preserve则可保留。
  下面示例程序用于将输入的文本保存为word文档,由运行结果截图可知,文本内部的空格保留不变,但开头的空格默认去掉了。

csharp 复制代码
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(sfd.FileName, WordprocessingDocumentType.Document))
{
    MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
    mainPart.Document = new Document();
    Body body = mainPart.Document.AppendChild(new Body());
    
    Paragraph paragraph = body.AppendChild(new Paragraph());
    Run run = paragraph.AppendChild(new Run());

    Text text = new Text();
    text.Text = txtContent.Text;
    run.AppendChild(text);
}

  将Space属性设置为Preserve,再次运行程序,则在word文档中会保留开头处的空格。

csharp 复制代码
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(sfd.FileName, WordprocessingDocumentType.Document))
{
    MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
    mainPart.Document = new Document();
    Body body = mainPart.Document.AppendChild(new Body());
    
    Paragraph paragraph = body.AppendChild(new Paragraph());
    Run run = paragraph.AppendChild(new Run());

    Text text = new Text();
    text.Space = SpaceProcessingModeValues.Preserve;
    text.Text = txtContent.Text;
    run.AppendChild(text);
}

参考文献

1https://github.com/dotnet/Open-XML-SDK

2https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk

3https://learn.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.wordprocessing.style?view=openxml-3.0.1

4https://blog.csdn.net/i042416/article/details/126228816

5https://www.php.cn/faq/2234830.html

6https://wiki.services.openoffice.org/w/index.php?title=OOXML/WordProcessingML\&direction=prev\&oldid=235815

相关推荐
2601_9499506317 小时前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
鲲穹AI种草1 天前
Word 文档批量处理工具怎么选,多款工具实际使用情况整理
word·文档批量处理
开开心心就好1 天前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
qq_369173632 天前
一句话将 Word、PPT、PDF 发布成链接
人工智能·pdf·word·powerpoint·效率工具·ai 办公
开开心心就好4 天前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio
是枚小菜鸡儿吖4 天前
TraceBack:基于TextIn xParse,统一解析PDF/Word/Excel/扫描件/截图,自动交叉核验维修报告真伪,带原文出处,让造假无处遁形
pdf·word·excel
叶九灵不灵5 天前
WORD排版两三事
word
古少侠5 天前
多个 Markdown 文档怎么批量转 Word?DS随心转一次性收口
word·markdown·pandoc·批量转换·ds随心转
工具派7 天前
Word文档太大怎么拆分?段落结构与两种拆法的边界实测
开发语言·c#·word
Metaphor6927 天前
Python 实现 Word/TXT 互转:附完整代码
python·word·格式转换·txt