在软件系统中,我们经常要输出一些word ,excel,ppt文档,为了输出结果漂亮美观、输出操作方便快捷,通常要制作一些模板文件,通过对模板文件中的关键信息进行修改,就不用管排版、格式等处理了。
在word中,使用非常多的就是书签,替换书签的内容,从而达到快速高效的产出目的。而有人觉得word用书签处理不了表格,于是,我就不信,来测试了一下。
主要目的
如下表格,每一次产出都要得到如下格式的表格,每次红线内的内容不一样,并且需要计算出合计项。
在模板文件中设计的表格如下,表头、首列及合计单元格的样式不同与其他单元格,表格已插入了一个书签,便于查找操作;而且表格数据行有5行(表一共有7行),而实际的数据可能是5行,也可能小于5行(不能高于5行,因为word中只给定了有限的空间位置)
实现步骤
1.在word中最大限度的设计好表格的样式、位置、大小及单元格的字体、风格样式等,保存为模板文件;
2.从数据库中查询数据为datatable,并将列名增加到首行,成为第一列(word中表格的表头);
3.根据书签读取表格;
4.将datatable写入表格;
5.删除空白行;
6.查询是否有合计行,如果有计算合计。
相关代码
这里使用的第三方组件,Aspose.Words。相关操作代码如下:
打开word
1
|
Document doc =
new
Document(txtDocPath.Text.Trim());
|
根据书签读取表格
1
2
|
Bookmark bm = doc.Range.Bookmarks[
"书签名"
];
table = (Table)bm.BookmarkStart.GetAncestor(NodeType.Table);
|
读取所有表格
1
2
3
4
5
6
|
//读取所有表格
NodeCollection tables = doc.GetChildNodes(NodeType.Table,
true
);
for
(
int
i = 0; i < tables.Count; i++)
{
Table table = (Table)doc.GetChild(NodeType.Table, i,
true
);
}
|
遍历书签
1
2
3
4
5
6
|
//读取所有书签
BookmarkCollection bmCollection = doc.Range.Bookmarks;
for
(
int
i = 0; i < bmCollection.Count; i++)
{
Console.WriteLine(bmCollection[i].Name+
@":"
+bmCollection[i].Text);
}
|
遍历表格
1
2
3
4
5
6
7
8
9
|
//遍历行列
foreach
(Row row
in
table.Rows)
{
int
rowIndex = table.Rows.IndexOf(row);
foreach
(Cell cell
in
row.Cells)
{
Console.WriteLine(cell.ToString());
}
}
|
更新表格内容
1
2
3
4
5
6
7
8
9
|
DocumentBuilder builder=
new
DocumentBuilder(doc);
for
(
int
i = 0; i < dt.Rows.Count; i++)
{
for
(
int
j = 0; j < dt.Columns.Count; j++)
{
builder.MoveTo(table.Rows[i].Cells[j].FirstParagraph);
builder.Write(dt.Rows[i][j].ToString());
}
}
|
保存word
1
|
doc.Save(txtDocPath.Text.Trim());
|
注意事项
去CSDN去下载破解版本的,如果未破解,将会出现红色版权标记。
参考链接
https://forum.aspose.com/t/how-to-find-a-table-present-in-word-document-using-aspose-word/46159
https://forum.aspose.com/t/fill-table-in-word/52564/2
https://docs.aspose.com/dashboard.action
https://github.com/asposemarketplace/Aspose_for_OpenXML/wiki/Change-text-in-a-table
https://forum.aspose.com/t/replace-text-in-table-cell-but-keep-existing-text-format/47251/11
本文转自我也是个傻瓜51CTO博客,原文链接:http://www.cnblogs.com/liweis/p/7195013.html ,如需转载请自行联系原作者