4

C#でopenxml sdk 2を使用して段落スタイルを作成し、それを段落に適用すると、すべてが正しくなり、問題なく実行されます。

しかし、以下のコードでは、文字スタイルを作成して実行に適用しても、ドキュメントの実行は変更されません。

以下のコードは、ドキュメントのスタイル部分にスタイルを作成して保存します。

            StyleDefinitionsPart stylePart = mainPart.AddNewPart<StyleDefinitionsPart>();
            Style style = new Style()
            {
                Type = StyleValues.Character,
                CustomStyle = true,
                StyleId = "CharacterStyle1"
            };
            LinkedStyle linkedStyle1 = new LinkedStyle() { Val = "LinkedStyle" };
            style.Append(linkedStyle1);
            style.Append(new Name() { Val = "CharacterStyle1" });
            StyleRunProperties styleRunProperties1 = new StyleRunProperties();
            Color color = new Color() { Val = "FF0000" };
            RunFonts font1 = new RunFonts() { ComplexScript = "Tahoma" };
            styleRunProperties1.Append(color);
            styleRunProperties1.Append(font1);
            styleRunProperties1.Append(new Bold());
            styleRunProperties1.Append(new FontSize() { Val = "48" });
            style.Append(styleRunProperties1);
            stylePart.Styles = new Styles();

            stylePart.Styles.Append(style);

以下のコードは、実行にスタイルを適用するために私が書いたものです。

            Paragraph heading = new Paragraph();
            ParagraphProperties headingPPr = new ParagraphProperties();
            heading.Append(headingPPr);

            Run run1 = new Run();
            Text textRun1 = new Text("THIS IS TEST RUN 1");
            run1.Append(textRun1);
            RunProperties rprRun1 = new RunProperties {RunStyle = new RunStyle() {Val = "CharacterStyle1"}};

            heading.Append(run1);
            body.Append(heading);

そして、これらはdocument.xmlの出力コードです:

 <?xml version="1.0" encoding="utf-8"?>
 <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
 <w:body>
 <w:p>
  <w:pPr />
  <w:r w:rsidRPr="009531B2">
    <w:t>THIS IS TEST RUN 1</w:t>
  </w:r>
 </w:p>
 </w:body>
 </w:document>

スタイルが私のランニングに適用されませんでした!

最後に、これは出力されたドキュメントを開いたときのスタイル ギャラリーのスクリーン ショットです。この画像は、スタイルがドキュメントに正常に追加されたことを示していますが、実行には適用されませんでした。

ドキュメントネットのスタイルの画像

文字スタイルを実行に適用するにはどうすればよいですか?

4

1 に答える 1

3

OpenXMLの ECMA 仕様に基づいて、段落内のランをスタイルするには、段落記号にもスタイルを適用する必要があります。

17.3.1.29 rPr (段落記号の実行プロパティ)

この要素は、この段落の段落記号の物理的な位置を表すために使用されるグリフに適用される run プロパティのセットを指定します。この段落記号は文書内の物理的な文字であり、書式設定することができるため、文書内の他の文字と同様にこの書式設定を表すことができます。この要素が存在しない場合、段落記号は、他の一連のテキストと同様に書式設定されていません。

したがって、コードでこれを修正するには..これを試してください..

Paragraph heading = new Paragraph();
ParagraphProperties headingPPr = new ParagraphProperties();
heading.Append(headingPPr);
ParagraphMarkRunProperties headingParagraphMarkRunProperties = new ParagraphMarkRunProperties();
RunStyle runStyle1 = new RunStyle(){ Val = "CharacterStyle1" };

headingParagraphMarkRunProperties.Append(runStyle1);
headingPPr.Append(headingParagraphMarkRunProperties);

Run run1 = new Run();
Text textRun1 = new Text("THIS IS TEST RUN 1");
run1.Append(textRun1);
RunProperties rprRun1 = new RunProperties {RunStyle = new RunStyle() {Val = "CharacterStyle1"}};

run1.Append(rprRun1);

heading.Append(run2);
body.Append(heading);

アップデート:

コメント内の開いている xml スニペットに基づいて、含めるのを忘れていました

RunProperties rprRun1 = new RunProperties {RunStyle = new RunStyle() {Val = "CharacterStyle1"}};
    
 run1.Append(rprRun1); //Adding run properties to the run

あなたのコードで。また、独自のプロパティ セクションがあるため、run要素に適用される書式設定を取得するために、実行にプロパティを個別に適用する必要もあります。run

段落がプロパティを持つことができるのと同様に、ランもプロパティを持つことができます。r 要素内のすべての要素は、対応するオプションの rPr 実行プロパティ要素 (§17.7.9.1; §17.3.2.27) によって制御されるプロパティを持ち、r 要素の最初の子になります。次に、rPr 要素は、r 要素の残りの子に適用される一連のプロパティ要素のコンテナーです。[注: rPr コンテナー要素内の要素により、消費者は、たとえば、次の実行コンテンツのコンテンツを太字にするか、下線を引くか、または表示するかを制御できます。エンドノート】

お役に立てれば。

于 2013-04-10T08:44:07.623 に答える