我创建了一个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);
答案 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
}
}
的书签中插入并创建一个新表。假设Tbl
为doc
,Word.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);
}