我的程序需要以Office .doc
格式生成非常简单的报告(非XML),并且文档的某些部分需要加粗。我一直在查看defining ranges的文档,这部分是我的代码目前所源自的文档。 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文档,粗体文本和非粗体文本分散在各处。
答案 0 :(得分:8)
Here这是我提出的答案,它允许您在同一个字符串中使用粗体和常规字符串的一部分。
我所做的是自动化的,但如果您知道自己在做什么,情况也是如此。请记住,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();
}
显然,如果你想进一步抽象,你可以为char
或string
添加一个参数,这样就可以改变用于设置粗体开始/停止的内容。 / p>
有一点要注意,在另一个帖子的评论中讨论过,由于某种原因,Bold只是一个int。设置它没有bool值。我知道这很奇怪。
答案 1 :(得分:0)
您可以简单地使用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();
希望这有帮助。
答案 2 :(得分:-1)
这是一个古老的问题,但是当我遇到同样的问题时,这并没有帮助我修改页眉或页脚,但帮助我找到了解决方法,这是我的解决方案:< / p>
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;
}