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

是我想出的一个答案,它将允许您在同一字符串中使用粗体和常规字符串的一部分。

我所做的是自动化的,但如果你知道自己在做什么,这同样适用。还要记住,粗体只是一个 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这样您就可以更改用于设置粗体开始/停止的内容。

在另一个线程的评论中讨论的一件事是,由于某种原因,Bold 只是一个 int。没有用于设置的布尔值。这很奇怪,我知道。

于 2012-07-19T16:49:33.423 回答
1

您可以简单地使用段落对象来自定义不同文本块的格式。示例代码如下:

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();

希望这可以帮助。

于 2012-07-19T16:43:53.827 回答
-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 回答