Word table with borders

24,016

Solution 1

Try this variant:

oTable.Cell(r, c).Range.Borders[WdBorderType.wdBorderLeft].LineStyle = WdLineStyle.wdLineStyleSingle;
oTable.Cell(r, c).Range.Borders[WdBorderType.wdBorderRight].LineStyle = WdLineStyle.wdLineStyleSingle;
oTable.Cell(r, c).Range.Borders[WdBorderType.wdBorderTop].LineStyle = WdLineStyle.wdLineStyleSingle;
oTable.Cell(r, c).Range.Borders[WdBorderType.wdBorderBottom].LineStyle = WdLineStyle.wdLineStyleSingle;

Put in cycle.

Also you can set line width and color:

oTable.Cell(r, c).Range.Borders[WdBorderType.wdBorderBottom].LineWidth = WdLineWidth.wdLineWidth050pt;
oTable.Cell(r, c).Range.Borders[WdBorderType.wdBorderBottom].Color = WdColor.wdColorRed;

Solution 2

I used the following options to set all borders and it is quite easier than settings borders for every cell. Please note that the logic for getting Range rng is for VSTO add-in, but the table logic remains same.

    using Microsoft.Office.Interop.Word;
    ......
    void AddTable()
    {
      Range rng = Globals.ThisAddIn.Application.Selection.Range;
      Table tbl = rng.Tables.Add(rng, 3, 5); //make table at current selection
      tbl.Range.Font.Name = "Calibri";
      tbl.Range.Font.Size = 10.5F;
      tbl.Range.Font.Bold = 0;

      //these 2 lines put borders both inside & outside - see result image at end
      tbl.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
      tbl.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;

      for (r = 1; r <= 3; r++)
        for (c = 1; c <= 5; c++)
        {
          strText = "r" + r + "c" + c;
          oTable.Cell(r, c).Range.Text = strText;
        }

    }

Result will be like table below with borders

enter image description here

Hope this helps.

Solution 3

You can try to use this commands:

oTable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle; 
oTable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble;

Use them in cycle. After putting the text.

Share:
24,016
Alex F
Author by

Alex F

Updated on November 20, 2020

Comments

  • Alex F
    Alex F over 3 years

    The following code inserts a table to the Word document:

    using Word = Microsoft.Office.Interop.Word;
    ...
    object oMissing = System.Reflection.Missing.Value;
    object oEndOfDoc = "\\endofdoc";
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    
    Word.Table oTable;
    Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);
    oTable.Range.ParagraphFormat.SpaceAfter = 6;
    int r, c;
    string strText;
    for (r = 1; r <= 3; r++)
        for (c = 1; c <= 5; c++)
        {
            strText = "r" + r + "c" + c;
            oTable.Cell(r, c).Range.Text = strText;
        }
    

    This code is from the article: http://support.microsoft.com/Default.aspx?scid=kb;en-us;316384&spid=2530&sid=47

    Result is:

    r1c1    r1c2    r1c3    r1c4    r1c5
    r2c1    r2c2    r2c3    r2c4    r2c5
    r3c1    r3c2    r3c3    r3c4    r3c5
    

    Resulting table doesn't have borders. How can I change this code to get a table with borders, like in "Insert Table" Word command?

  • Alex F
    Alex F almost 11 years
    Thanks. This code, both if added to the loop or before/after the loop, creates horizontal and external vertical lines. Internal vertical lines are still missing.