Word模板中的表格处理
在软件系统中,我们经常要输出一些word ,excel,ppt文档,为了输出结果漂亮美观、输出操作方便快捷,通常要制作一些模板文件,通过对模板文件中的关键信息进行修改,就不用管排版、格式等处理了。
在word中,使用非常多的就是书签,替换书签的内容,从而达到快速高效的产出目的。而有人觉得word用书签处理不了表格,于是,我就不信,来测试了一下。
主要目的
如下表格,每一次产出都要得到如下格式的表格,每次红线内的内容不一样,并且需要计算出合计项。
在模板文件中设计的表格如下,表头、首列及合计单元格的样式不同与其他单元格,表格已插入了一个书签,便于查找操作;而且表格数据行有5行(表一共有7行),而实际的数据可能是5行,也可能小于5行(不能高于5行,因为word中只给定了有限的空间位置)
实现步骤
1.在word中最大限度的设计好表格的样式、位置、大小及单元格的字体、风格样式等,保存为模板文件;
2.从数据库中查询数据为datatable,并将列名增加到首行,成为第一列(word中表格的表头);
3.根据书签读取表格;
4.将datatable写入表格;
5.删除空白行;
6.查询是否有合计行,如果有计算合计。
相关代码
这里使用的第三方组件,Aspose.Words。相关操作代码如下:
打开word
Document doc = new Document(txtDocPath.Text.Trim());
根据书签读取表格
Bookmark bm = doc.Range.Bookmarks["书签名"]; table = (Table)bm.BookmarkStart.GetAncestor(NodeType.Table);
读取所有表格
//读取所有表格 NodeCollection tables = doc.GetChildNodes(NodeType.Table, true); for (int i = 0; i < tables.Count; i++) { Table table = (Table)doc.GetChild(NodeType.Table, i, true); }
遍历书签
//读取所有书签 BookmarkCollection bmCollection = doc.Range.Bookmarks; for (int i = 0; i < bmCollection.Count; i++) { Console.WriteLine(bmCollection[i].Name+@":"+bmCollection[i].Text); }
遍历表格
//遍历行列 foreach (Row row in table.Rows) { int rowIndex = table.Rows.IndexOf(row); foreach (Cell cell in row.Cells) { Console.WriteLine(cell.ToString()); } }
更新表格内容
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
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