12

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

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;

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

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

4

3 に答える 3

8

これは、同じ文字列に太字と通常の文字列の一部を含めることができるようにする、私が思いついた答えです。

私がしていたことは自動化されていましたが、自分が何をしているのかを知っていれば同じことが当てはまります。Bold は単なる 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();
}

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

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

于 2012-07-19T16:49:33.423 に答える
-1

これは古い質問ですが、同じ問題に直面したため、これはヘッダーまたはフッターの変更には役立ちませんでしたが、その方法を理解するのに役立ちました。ここに私の解決策があります:

Word.Paragraph p = c2.Range.Paragraphs.Add(ref missing);
p.Range.Text = "your trip at " + sejour.Location;
SetTextColor(p.Range, Word.WdColor.wdColorWhite,0, p.Range.Text.Length - 1);
SetTextSize(p.Range, (float)14, 0, p.Range.Text.Length - 1);
SetTextSize(p.Range, (float)16, p.Range.Text.Length - 2 - sejour.Location.Length, sejour.Location.Length);

public void SetTextColor( Word.Range range, Microsoft.Office.Interop.Word.WdColor color, int start, int length)
{
    Word.Range rng = range;
    rng.Start = range.Start + start;
    rng.End = range.Start + start + length;
    rng.Font.Color = color;
}

public void SetTextSize(Word.Range range, float size, int start, int length)
{
    Word.Range rng = range;
    rng.Start = range.Start + start;
    rng.End = range.Start + start + length;
    rng.Font.Size = size;
}
于 2015-02-20T11:44:04.353 に答える