web-dev-qa-db-ja.com

ドキュメント全体を太字にすることなく、プログラムでWord文書に太字のテキストを書き込むにはどうすればよいですか?

私のプログラムは、Office .doc形式(非XML)で非常に単純なレポートを生成する必要があり、ドキュメントの特定の部分を太字にする必要があります。 範囲の定義 のドキュメントを見てきました。これは、現時点で私のコードが派生している部分です。 This ドキュメントの一部では、これを一般的にドキュメントに実装するのに十分な詳細が提供されていません。これまでの私のコードは次のとおりです。

object miss = System.Reflection.Missing.Value;
object Visible = true;
object start = 0;

Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
Document report = WordApp.Documents.Add(ref miss, ref miss, ref miss, ref miss);

String header = "Bold Header: ";
Range headerRange = report.Range(ref start, ref miss);
headerRange.Text = header;
headerRange.Font.Bold = -1;

String data = "Information underneath the header";
Range dataRange = report.Range();
dataRange.Text = data;
dataRange.Font.Bold = 1;

object filename = "test.doc";

report.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdPromptToSaveChanges;
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdWordDocument;
object routeDocument = true;
WordApp.Visible = true;

これにより、テキスト**Information underneath the header**のみを含むWord文書が作成されます。これは簡単な例です。

私のドキュメントはこれほど複雑になることはありませんが、太字のテキストと太字でないテキストが全体に分散している、さまざまな量のデータに基づいてWordドキュメントを生成したいと考えています。

11

Here これは私が思いついた答えであり、同じ文字列内に太字で規則的な文字列の一部を含めることができます。

私がやっていたことは自動化されていましたが、自分が何をしているかを知っていれば同じことが当てはまります。太字はintにすぎず、ブール値のtrue/falseはありません(何らかの理由で)。

リカルドの優れた点に従って、ここにもコードを投稿します。

private void InsertMultiFormatParagraph(string psText, int piSize, int piSpaceAfter = 10) {
    Word.Paragraph para = mdocWord.Content.Paragraphs.Add(ref mobjMissing);

    para.Range.Text = psText;
    // Explicitly set this to "not bold"
    para.Range.Font.Bold = 0;
    para.Range.Font.Size = piSize;
    para.Format.SpaceAfter = piSpaceAfter;

    object objStart = para.Range.Start;
    object objEnd = para.Range.Start + psText.IndexOf(":");

    Word.Range rngBold = mdocWord.Range(ref objStart, ref objEnd);
    rngBold.Bold = 1;

    para.Range.InsertParagraphAfter();
}

明らかに、これをさらに抽象化しようとしている場合は、charまたはstringのパラメーターを追加して、太字の開始/停止を設定するために使用されているものを変更できます。

他のスレッドのコメントで議論されたことに注意することの1つは、何らかの理由で、太字はintにすぎないということでした。それを設定するためのブール値はありません。それは変だ、私は知っている。

8
krillgar

Paragraphオブジェクトを使用するだけで、さまざまなテキストブロックの書式をカスタマイズできます。以下のコード例:

object DocumentEndIndex = "\\endofdoc";
object endDocument = wordDocument.Bookmarks.get_Item(ref DocumentEndIndex).Range;
Paragraph para = wordDocument.Content.Paragraphs.Add(ref endDocument);
para.Range.Text = text;
para.Range.set_Style(ref headingLevel);
// do format the text with para.Range object as you want
para.Range.InsertParagraphAfter();

お役に立てれば。

1
Duy Pham