0

OfficeのWord相互運用機能を使用してWord文書を作成しています。私はコードを介して見出しスタイルを設定しています。コンテンツは正しくスタイル設定されていますが、作成されたWord文書を開くと、ヘッダーでの選択にスタイルが選択されていません。これにより、目次で見出しが見つかりません。

object oMissing = Missing.Value;

//Start Word and create a new document.
var application = new Application();
application.Visible = true;
var document = application.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

foreach (var member in assembly.Members)
{
    //Insert a paragraph at the beginning of the document
    var paragraph = document.Content.Paragraphs.Add(ref oMissing);
    paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
    paragraph.Range.Text = member.MemberName;
    paragraph.Range.InsertParagraphAfter();
}

document.TablesOfContents.Add(document.Content, true /*use heading styles*/, oMissing, oMissing, oMissing,
                                                    oMissing, oMissing, oMissing, oMissing, oMissing,
                                                    oMissing, oMissing);

document.SaveAs(@"C:\test.docx", oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
document.Close();
application.Quit();

この例では、目次に「エントリが見つかりません」と表示されます。

コンテンツは見出しスタイルで正しくスタイル設定されていることに注意してください。ただし、ドキュメントを手動で開いて[見出し1]を選択すると、目次でエントリが正しく検出されます。

なぜこれが起こるのか、何か考えはありますか?私は組み込みのスタイル名を持つcallignset_Styleです。なぜそれはスタイルを適用するのに、実際にはスタイル(この場合は見出し)として扱われないのですか?

アップデート

次のコードを追加すると、最初の見出しだけがWordの見出しとして認識されるようになります。

    foreach (var member in assembly.Members)
    {
        document.ActiveWindow.Selection.set_Style(WdBuiltinStyle.wdStyleHeading1);
        //Insert a paragraph at the beginning of the document
        var paragraph = document.Content.Paragraphs.Add(ref oMissing);
        paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
        paragraph.Range.Text = member.MemberName;
        paragraph.Range.InsertParagraphAfter();
    }
4

3 に答える 3

1

操作の順番の違いに気づきました

フォローコードは実際のヘッダーを生成せず、ヘッダーのように見えるだけです

/*1*/ paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
/*2*/ paragraph.Range.Text = "Head";
/*3*/ paragraph.Range.InsertParagraphAfter();

問題を解決するには、このコードを使用する必要があります

/*1*/ paragraph.Range.Text = "Head";
/*2*/ paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
/*3*/ paragraph.Range.InsertParagraphAfter();
于 2014-10-31T10:28:52.027 に答える
0

段落を追加した後、それが機能する可能性のある段落を選択します。

paragraph.Range().Select()
于 2013-04-08T09:54:00.300 に答える
0

私は似たようなことをしなければなりませんでしたが、段落はスタイルを取得していませんでした...

代わりにTypeTextを使用し、次に機能しました...Word.Selectionも使用しました。ドキュメントをマージしていますが、コードは次のようになっているはずです。

(行の後:var document = application.Documents.Add(ref oMissing、ref oMissing、ref oMissing、ref oMissing))。私はWord = Microsoft.Office.Interop.Wordを使用しているので、「Word」選択がそれに実現される前に。

Word.Selection selection = application.Selection;

foreach (var member in assembly.Members)
{
  selection.TypeText(member.MerberName);
  selection.set_Style(WdBuiltinStyle.wdStyleHeading1);
  selection.TypeParagraph();
}

それはここで機能し、目次はいっぱいになりつつあります。

于 2013-07-16T00:24:27.973 に答える