当前位置: 首页 > 知识库问答 >
问题:

使用OpenXML对Word文档中的内容控制应用样式

陶胤运
2023-03-14

我正在尝试使用OpenXML SDK和Word文档生成器生成Word文档。我需要在内容控制(重复部分)上应用我的自定义样式。

对于递归占位符,我使用

foreach (var item in list)
{
    var datacontext = new OpenXmlElementDataContext()
    {
        Element = openXmlElementDataContext.Element,
        DataContext = item.Value
    };
    var clonedElement = CloneElementAndSetContentInPlaceholders(datacontext);
    SetContentOfContentControl(clonedElement, item.Value);
}
openXmlElementDataContext.Element.Remove();

我需要在这个元素上应用我的风格。我能做什么?

我试图通过“Open XML SDK 2.5 Productivity Tool for Microsoft Office”看到生成的代码来启发我:

var moduleDatacontext = new OpenXmlElementDataContext()
{
    Element = openXmlElementDataContext.Element,
    DataContext = module.Valeur
};
var moduleClonedElement = CloneElementAndSetContentInPlaceholders(moduleDatacontext);

var sdtProperties1 = new SdtProperties();
var styleId1 = new StyleId() { Val = "FormationTitre2" };

ParagraphMarkRunProperties paragraphMarkRunProperties1 = new ParagraphMarkRunProperties();
RunFonts runFonts1 = new RunFonts() { ComplexScriptTheme = ThemeFontValues.MinorHighAnsi };

paragraphMarkRunProperties1.Append(runFonts1);

sdtProperties1.Append(styleId1);
sdtProperties1.Append(paragraphMarkRunProperties1);

Run run1 = new Run() { RsidRunProperties = "00C463E5" };

RunProperties runProperties1 = new RunProperties();
RunFonts runFonts2 = new RunFonts() { ComplexScriptTheme = ThemeFontValues.MinorHighAnsi };

runProperties1.Append(runFonts2);

run1.Append(runProperties1);

moduleClonedElement.Append(sdtProperties1);
moduleClonedElement.Append(run1);

打开生成的文档时,出现以下错误:

对不起。我们不能打开“... docx”,因为我们发现它的内容有问题。

全尺寸

共有1个答案

孟俊发
2023-03-14

我找到了解决方案。我搜索第一段,并在上面应用我的自定义样式。

// clone element
var clonedElement = CloneElementAndSetContentInPlaceholders(datacontext);

// search the first created paragraph on my clonedElement
Paragraph p = clonedElement.Descendants<Paragraph>().FirstOrDefault();
if (p != null)
    p.PrependChild<ParagraphProperties>(new ParagraphProperties());
// get the paragraph properties
ParagraphProperties pPr = p.Elements<ParagraphProperties>().First();
// apply style
pPr.ParagraphStyleId = new ParagraphStyleId { Val = "FormationTitre2" };
// set content of content control
SetContentOfContentControl(clonedElement, item.Value);
 类似资料:
  • 我已经很多年没有使用VB了,所以如果这是显而易见的,请原谅我。我正在尝试编写一个word vba宏,以便在模板中使用,该模板将显示一个userform,然后导入fileA的内容。docx,fileB。docx或fileC。docx取决于用户表单。(之后我将使用书签填写一些表单数据,我不知道这是否相关)。文件A、B和C将包含一些基本格式(如列表)的文本,但没有什么特别之处。 我在网上看到的解决方案可

  • 我想使用openxml在word文档中添加一个水平形状。 我试图使用OpenXML生产力工具粘贴代码,但在打开生成的文件时出现了一些错误http://schemas.microsoft.com/office/word/2010/wordml:anchorId“属性未声明)

  • 本文向大家介绍C#采用OpenXml给Word文档添加表格,包括了C#采用OpenXml给Word文档添加表格的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#采用OpenXml给Word文档添加表格的方法,是非常实用的操作技巧。分享给大家供大家参考。具体分析如下: 这里将展示如何使用Openxml向Word添加表格. 代码中表头和数据我们用的同一个TableRow来添加,其实可以通过T

  • 我想编写一个通用方法,通过循环段落和形状来提取从word文档到文本文件的所有内容。 我能够使用下面的代码解析90%的文档。但是,此代码不会读取少数表中的内容。 我无法从MS word文档中提取表格中的少量文本。这个问题只涉及一些文本和表格,我可以用我的代码阅读文档中的大部分内容。 Word文档位于以下链接中- https://drive.google.com/file/d/0B1C7jj9dLG2

  • 本文向大家介绍C#采用OpenXml实现给word文档添加文字,包括了C#采用OpenXml实现给word文档添加文字的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#采用OpenXml实现给word文档添加文字的方法,分享给大家供大家参考。具体方法如下: 一般来说,使用OpenXml给word文档添加文字,每个模块都有自己对于的属性以及内容,要设置样式就先声明属性对象,将样式Appen

  • 我找不到提取每个单元格中文本的方法