使用互操作将多个单词表添加到单词中

我正在尝试使用c#将多个表插入到word文档中,但是当我添加另一个代码块来添加表时,我收到错误而第二个表没有被插入。 如何将范围向下移动到页面底部,然后添加另一个表? 我尝试使用文档参考结束创建一个新范围,但这似乎不起作用,任何人都可以给我一些帮助吗?

Word._Application objApp; Word._Document objDoc; try { object objMiss = System.Reflection.Missing.Value; object objEndOfDocFlag = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ //Start Word and create a new document. objApp = new Word.Application(); objApp.Visible = true; objDoc = objApp.Documents.Add(ref objMiss, ref objMiss, ref objMiss, ref objMiss); //Insert a paragraph at the end of the document. Word.Paragraph objPara2; //define paragraph object object oRng = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; //go to end of the page objPara2 = objDoc.Content.Paragraphs.Add(ref oRng); //add paragraph at end of document objPara2.Range.Text = "Test Table Caption"; //add some text in paragraph objPara2.Format.SpaceAfter = 10; //defind some style objPara2.Range.InsertParagraphAfter(); //insert paragraph //Insert a table Word.Table objTab1; //create table object Word.Range objWordRng = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; //go to end of document objTab1 = objDoc.Tables.Add(objWordRng, 9, 2, ref objMiss, ref objMiss); //add table object in word document objTab1.Range.ParagraphFormat.SpaceAfter = 6; objTab1.Range.Borders[Word.WdBorderType.wdBorderBottom].LineStyle = Word.WdLineStyle.wdLineStyleThickThinLargeGap; objTab1.Range.Borders[Word.WdBorderType.wdBorderHorizontal].LineStyle = Word.WdLineStyle.wdLineStyleDouble; objTab1.Range.Borders[Word.WdBorderType.wdBorderTop].LineStyle = Word.WdLineStyle.wdLineStyleDouble; objTab1.Range.Borders[Word.WdBorderType.wdBorderLeft].LineStyle = Word.WdLineStyle.wdLineStyleDouble; objTab1.Range.Borders[Word.WdBorderType.wdBorderRight].LineStyle = Word.WdLineStyle.wdLineStyleDouble; objTab1.Columns.Borders[Word.WdBorderType.wdBorderVertical].LineStyle = Word.WdLineStyle.wdLineStyleDouble; objTab1.Columns[1].Shading.BackgroundPatternColor = Word.WdColor.wdColorGray20; objTab1.Columns[1].Width = objApp.CentimetersToPoints(3.63f); objTab1.Columns[2].Width = objApp.CentimetersToPoints(13.11f); int iRow, iCols; string[] col = new string[9]; col[0] = "Row1"; col[1] = "row2"; col[2] = "Row3"; col[3] = "row4"; col[4] = "row5"; col[5] = "row6"; col[6] = "row7"; col[7] = "row8"; col[8] = "tow9"; for (iRow = 1; iRow <= 9; iRow++) { objTab1.Rows[iRow].Range.Font.Bold = 1; for (int i = 0; i <= col.Length; i++) { string s = col[i]; objTab1.Rows[iRow++].Range.Text = s; objTab1.Rows[iRow].Range.Font.Bold = 1; } } objApp.Selection.TypeParagraph(); //Insert a paragraph at the end of the document. Word.Paragraph objPara3; //define paragraph object object oRng2 = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; //go to end of the page objPara3 = objDoc.Content.Paragraphs.Add(ref oRng2); //add paragraph at end of document objPara3.Range.Text = "hello"; //add some text in paragraph objPara3.Format.SpaceAfter = 10; //defind some style objPara3.Range.InsertParagraphAfter(); //insert paragraph //Insert a 2 x 2 table, (table with 2 row and 2 column) Word.Table objTab2; //create table object Word.Range objWordRng2 = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; //go to end of document objTab2 = objDoc.Tables.Add(objWordRng2, 9, 2, ref objMiss, ref objMiss); //add table object in word document objTab2.Range.ParagraphFormat.SpaceAfter = 6; object stylename2 = "Table Grid"; 

我得到以下exception“所请求的集合成员不存在”

没有完全按照您希望的布局显示方式。 发布的代码存在一些问题。 首先在for循环中,您将文本添加到第一个表中,我不确定您使用以下行做了什么:

 objTab1.Rows[iRow++].Range.Text = s; objTab1.Rows[iRow].Range.Font.Bold = 1; 

第一行中的iRow++增量将在表中的行所在的位置处消失。 我猜你可能想要:

 objTab1.Rows[iRow].Range.Font.Bold = 1; objTab1.Rows[iRow].Range.Text = s; iRow++; 

另一个问题是代码如何获得如下的最后一段:

 object oRng2 = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; objPara3 = objDoc.Content.Paragraphs.Add(ref oRng); 

oRng2范围是doc范围的结尾,但是下一行使用oRng ,它是文档的顶部。 将添加段落更改为适当的范围应该可以解决此问题。

 objPara3 = objDoc.Content.Paragraphs.Add(ref oRng2); 

希望这可以帮助。