-->

Word table with borders

2020-07-23 07:10发布

问题:

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?

回答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;


回答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

Hope this helps.



回答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.