【问题标题】:Add table in current position with a word add-in使用单词插件在当前位置添加表格
【发布时间】:2019-01-15 20:18:55
【问题描述】:

我想用我的 Word 插件添加一个表,其中包含我数据库中的数据。 我已经成功地做到了,但现在我对桌子的位置有疑问。 我想把它准确地放在我在 Word 文档中的当前位置。 但是,它总是在开头添加。 有谁知道如何调整我的起始值始终是我当前位置的范围? 这是我的代码的一部分:

private void createTable_Click(object sender, EventArgs e) {
object start = 0, end = 0;
Word.Document document = Globals.ThisAddIn.Application.ActiveDocument; 
Word.Range rng = document.Range(ref start, ref end);

// Insert a title for the table and paragraph marks.
rng.InsertBefore("List"); 
rng.Font.Name = "Verdana"; 
rng.Font.Size = 16; 
rng.InsertParagraphAfter(); 
rng.InsertParagraphAfter(); 
rng.SetRange(rng.End, rng.End);

// Add the table.
rng.Tables.Add(document.Paragraphs[2].Range, 1, 7, ref missing, ref missing);

// Format the table and apply a style.
Word.Table tbl = document.Tables[1]; tbl.Range.Font.Size = 8;   
tbl.Borders[WdBorderType.wdBorderLeft].LineStyle =
  WdLineStyle.wdLineStyleSingle; 
tbl.Borders[WdBorderType.wdBorderRight].LineStyle =
  WdLineStyle.wdLineStyleSingle; 
tbl.Borders[WdBorderType.wdBorderTop].LineStyle =
  WdLineStyle.wdLineStyleSingle; 
tbl.Borders[WdBorderType.wdBorderBottom].LineStyle =
  WdLineStyle.wdLineStyleSingle; 
tbl.Borders[WdBorderType.wdBorderHorizontal].LineStyle =
  WdLineStyle.wdLineStyleSingle; 
tbl.Borders[WdBorderType.wdBorderVertical].LineStyle =
  WdLineStyle.wdLineStyleSingle;
tbl.Borders[WdBorderType.wdBorderBottom].Color = WdColor.wdColorBlack; tbl.Rows.Alignment = WdRowAlignment.wdAlignRowCenter; tbl.AutoFitBehavior(WdAutoFitBehavior.wdAutoFitWindow);

【问题讨论】:

  • 您似乎是在 document.Paragraphs[2].Range 指定的范围内添加表格,而不是在 rng 指定的范围内。例如rng.Tables.Add(rng, 1, 7, ref 缺失, ref 缺失);

标签: c# ms-word range office-addins word-addins


【解决方案1】:

重读时...插入当前位置 - 如果您的意思是光标所在的位置:

Word.Range rngSel = wdApp.Selection.Range;
rngSel.Tables.Add(//params here);

否则,如果您的意思是在代码插入信息的末尾,而不是这两行

rng.InsertBefore("List"); 
rng.Font.Name = "Verdana"; 
rng.Font.Size = 16; 
rng.InsertParagraphAfter(); 
rng.InsertParagraphAfter(); 
rng.SetRange(rng.End, rng.End);

使用

rng.Text = "List\n\n"
rng.Font.Name = "Verdana"; 
rng.Font.Size = 16; 
rng.Collapse(WdCollapseDirection.wdCollapseEnd);

\n 插入一个新段落(回车)并且可以作为字符串的一部分。

将文本直接分配给Range 并使用Collapse 方法(在我看来)比各种Insert 方法更容易预测。一些 Insert 方法包括在范围内插入的内容,而另一些则不包括。

FWIW 当不清楚可能是什么问题时,可以将rng.Select(); 放在代码中的关键点并注释掉其余行,以便代码以可见的范围结束。这通常可以提供有关范围问题根源的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多