通过C#在Microsoft Word中动态填充现有表

时间:2019-06-25 11:08:38

标签: c# ms-word office-interop word-automation word-table

我创建了一个Word模板,其中包含一个我想动态填充的表格。 行数始终是动态的,并且总是不同的。

如何填充和扩展现有表格?我已经开始实现代码。 我可以创建新表并填充它们,但不能填充现有表。

object oMissing = Missing.Value;

Word._Application word = new Word.Application();
word.Visible = true;

// Template
object oTemplate = "C:\\Temp\\Template.dotx";
Word._Document document = word.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);

// Insert table and fill with data
Word.Table oTable;

int columnCount = 4;
int rowCount = someVariableCount;

// Table Bookmark
object oBookMark = "Table";

Word.Range wrdRng = document.Bookmarks.get_Item(oBookMark).Range;
oTable = document.Tables.Add(wrdRng, someVariableCount, columnCount, ref oMissing, true);

1 个答案:

答案 0 :(得分:1)

在Word中创建和扩展表的最有效方法是将内容以分隔文本格式“转储”,然后将其转换为表。进行其他任何操作(例如创建表,然后逐个单元格编写或逐行追加)相对较慢。桌子越长,它就越慢!这是由于Word每次更改都会动态地布局页面。

如果要从文档中已有的标题行开始,或者需要扩展现有表,则将定界的内容直接插入现有表的下方,然后转换为表。在测试中,表列并不总是使用此方法精确对齐。解决方法是,可以将该表插入其他位置,然后移至现有表,在其中应调整正确的列宽。

使用分号字段定界符和char(13)记录定界符对数据进行采样。请注意,任何字符都可以用作字段定界符,但需要ANSI 13作为记录定界符:

  

Test; One; 3; End

     

换行;两个; 4;结束

在名为 private void Valid_Rub_Btn_Click(object sender, RoutedEventArgs e) { string artCode = CodeArt_TxtBox.Text; string codeRecette = Recette_TextBox.Text; string article = Art_TxtBox.Text; using (Model1Container dc=new Model1Container()) { #region Code_Art Selected bool b = !string.IsNullOrEmpty(CodeArt_TxtBox.Text); if (b) { if (!string.IsNullOrEmpty(Recette_TextBox.Text)) { var codeart = from c in dc.GCARTICLE where c.ART_CODE.Contains(artCode) && c.ART_RUB4.Contains(codeRecette) select new { c.ART_RUB4, c.ART_CODE, c.ART_LIB1 }; Art_DT.ItemsSource = codeart.ToList(); } else { var codeart = from c in dc.GCARTICLE where c.ART_CODE.Contains(artCode) select new { c.ART_RUB4, c.ART_CODE, c.ART_LIB1 }; Art_DT.ItemsSource = codeart.ToList(); } } #endregion #region Article Selected bool b1 = (!string.IsNullOrEmpty(Art_TxtBox.Text)); if (b1) { if (!string.IsNullOrEmpty(Recette_TextBox.Text)) { var codeart = from c in dc.GCARTICLE where c.ART_LIB1.Contains(article) && c.ART_RUB4.Contains(codeRecette) select new { c.ART_RUB4, c.ART_CODE, c.ART_LIB1 }; Art_DT.ItemsSource = codeart.ToList(); } else { var codeart = from c in dc.GCARTICLE where c.ART_LIB1.Contains(article) select new { c.ART_RUB4, c.ART_CODE, c.ART_LIB1 }; Art_DT.ItemsSource = codeart.ToList(); } } #endregion } } 的书签中插入并创建一个新表。假设TbldocWord.Document为对象已定义并实例化:

missing

追加到现有表(文档中的第一个表):

        string tableData = "Test;One;3;End\nNew line;Two;4;End";
        string bkmName = "TableTarget";
        if (doc.Bookmarks.Exists(bkmName))
        {
            Word.Range rngTable = doc.Bookmarks[bkmName].Range;
            rngTable.Text = tableData;
            Word.Table tbl = rngTable.ConvertToTable(";", missing, missing, missing, missing,
                missing, missing, missing, missing, missing, missing, missing, missing, missing,
                missing, Word.WdDefaultTableBehavior.wdWord8TableBehavior);
        }