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

时间:2017-02-27 22:31:11

标签: c# office-interop word-automation

我正在尝试使用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";

我收到以下异常“所请求的集合成员不存在”

1 个答案:

答案 0 :(得分:2)

没有完全按照您希望的布局显示方式。发布的代码存在一些问题。首先在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); 

希望这有帮助。