【问题标题】:Creating Table of Contents using VSTO and Word使用 VSTO 和 Word 创建目录
【发布时间】:2014-09-22 23:00:50
【问题描述】:

下面的代码应该创建一个word文档,然后生成一个目录。它应该只有一个名为“INTRODUCTION”的项目,但我一直收到一条错误消息,提示“发生了“system.runtime.interopservicesCOMException”类型的未处理异常。

object oMissing = System.Reflection.Missing.Value;
object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */

//Start Word and create a new document.
Word.Application oWord = new Word.Application();
Word.Document oDoc = new Word.Document();

oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

object oTrue = true;
object oFalce = false;
object styleHeading2 = "Heading 2";
object styleHeading3 = "Heading 3";
oWord.Selection.Range.set_Style(ref styleHeading2);
oWord.Selection.Range.set_Style(ref styleHeading3);

oWord.Selection.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevel2;
oWord.Selection.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevel3;
oWord.Selection.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevelBodyText;

object oBookMarkTOC = "Bookmark_TOC";

Word.Range rngTOC = oDoc.Bookmarks.get_Item(ref oBookMarkTOC).Range;  <=== Error Occurs On This Line

rngTOC.Select();

object oUpperHeadingLevel = "1";
object oLowerHeadingLevel = "3";
object oTOCTableID = "TableOfContents";
oDoc.TablesOfContents.Add(rngTOC, ref oTrue, ref oUpperHeadingLevel, ref oLowerHeadingLevel, ref oMissing, ref oTOCTableID, ref oTrue, ref oTrue, ref oMissing, ref oTrue, ref oTrue, ref oTrue);

Word.Paragraph oIntro;
oIntro = oDoc.Content.Paragraphs.Add(ref oMissing);
oIntro.Range.Text = "INTRODUCTION";
oIntro.Range.set_Style(ref styleHeading2);
oIntro.Range.Font.Bold = 1;
oIntro.Range.Font.Name = "Arial";
oIntro.Range.Font.Size = 12;
oIntro.Format.SpaceAfter = 15;    
oIntro.Range.InsertParagraphAfter();


Word.Paragraph oPara1;
oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
oPara1.Range.Text = "This is the paragraph after the Introduction Title.";
oPara1.Range.set_Style(ref styleHeading2);
oPara1.Range.Font.Bold = 0;
oPara1.Range.Font.Name = "Arial";
oPara1.Range.Font.Size = 12;
oPara1.Format.SpaceAfter = 15;    
oPara1.Range.InsertParagraphAfter();

//Update table of contents
oDoc.TablesOfContents[1].Update();

【问题讨论】:

  • 你能看到什么异常信息吗?也许使用 try-catch 或在调试模式下运行。
  • 这一行出现错误 Word.Range rngTOC = oDoc.Bookmarks.get_Item(ref oBookMarkTOC).Range;它还说“{“请求的集合成员不存在。”}”
  • 我不熟悉此 API,但该消息是否暗示 Bookmarks 中实际上不存在“Bookmark_TOC”?
  • 另外,它可能会帮助您将行分解为多个语句,每个操作在一行上(一个用于.Bookmarks,一个用于.get_Item,一个用于.Range)。这应该更清楚究竟是哪个操作引发了异常。
  • 请给你的问题一个有意义的标题。目前它太宽泛了。

标签: c# ms-word vsto


【解决方案1】:

这段代码对我有用,试试吧:

selection.Font.Bold = 1;
selection.TypeText("Table of Content\n");  
TableOfContents toc = wordDoc.TablesOfContents.Add(selection.Range, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

【讨论】:

    猜你喜欢
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多