如何在不加粗整个文档的情况下以编程方式将粗体文本写入Word文档?

我的程序需要以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; 

这会生成一个单词文档,其中只有**Information underneath the header**文本**Information underneath the header** 。 这是一个简单的例子。

我的文档不会比这复杂得多,但我希望基于可变数据量生成Word文档,并在其中分散粗体文本和非粗体文本。

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

我所做的是自动化的,但如果你知道你在做什么,同样适用。 请记住,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(); } 

显然,如果您尝试进一步抽象,可以为charstring添加参数,以便更改用于设置粗体启动/停止的内容。

有一点需要注意的是,在另一个post的评论中讨论过,由于某种原因,Bold只是一个int。 设置它没有bool值。 我知道这很奇怪。

您只需使用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(); 

希望这可以帮助。

这是一个老问题,但是当我遇到同样的问题时,这并没有帮助我修改页眉或页脚,但帮助我找到了如何做到这一点,这是我的解决方案:

 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; }