C# 带边框的 Word 表格

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16808928/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 07:49:43  来源:igfitidea点击:

Word table with borders

c#automationms-wordms-office

提问by Alex F

The following code inserts a table to the Word document:

以下代码将表格插入到 Word 文档中:

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

此代码来自文章: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?

结果表没有边框。如何更改此代码以获取带边框的表格,例如“插入表格”Word 命令?

采纳答案by Rim4i4ok

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;

回答by Rim4i4ok

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.

循环使用它们。放文字后。

回答by Mr.Hunt

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 rngis for VSTO add-in, but the table logic remains same.

我使用以下选项来设置所有边框,这比为每个单元格设置边框要容易得多。请注意,获取的逻辑Range rng是针对 VSTO 插件的,但表逻辑保持不变。

    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.

希望这可以帮助。