在软件系统中,我们经常要输出一些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://docs.aspose.com/display/wordsnet/Introduction+and+Creating+Tables#IntroductionandCreatingTables-InsertingaCloneofanExistingTable

https://forum.aspose.com/t/replace-text-in-table-cell-but-keep-existing-text-format/47251/11

Word模板中的表格处理的更多相关文章

  1. 将excel中的数据填入word模板中-VBA

    首先将word模板中需要填写excel中数据的空白处用自己独特的字符串标记,比如   数据001  什么的.如下图: 这样,就可以用vba搜寻这些自己独特的标记来根据excel内容填充word了. 第 ...

  2. POI往word模板中写入数据

    转: POI往word模板中写入数据 2018年03月24日 16:00:22 乄阿斗同學 阅读数:2977  版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  3. 向Word模板中填充数据

    现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指 ...

  4. [转载]java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  5. [原创]java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  6. PPT模板中的”书签”

    引言 在项目中生成文档报告经常需要word中,其中的关键就是书签,通过定位和替换书签中的值来达到生成定制的报告(详见Word模板中的表格处理):但在PPT中却没有书签这个概念,所以,不能采用这种方式. ...

  7. 从一个word文件中读取所有的表格和标题(1)

    首先讲需求: 从word文件中读表格里的数据,然后插入数据库中.word文件中的表格是带有标题的,把标题读出来,进行匹配数据库. 需求分析: word2007底层是以xml文件存储的,所以分析xml的 ...

  8. Open Xml SDK Word模板开发最佳实践(Best Practice)

    1.概述 由于前面的引文已经对Open Xml SDK做了一个简要的介绍. 这次来点实际的——Word模板操作. 从本质上来讲,本文的操作都是基于模板替换思想的,即,我们通过替换Word模板中指定元素 ...

  9. .net core 使用NPOI填充Word模板导出Word

    最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...

随机推荐

  1. delphi 取上级目录

    var  S: string;begin  S := 'c:\aa\bb\cc\dd\abc.exe';  ShowMessage(ExtractFileDir(ExtractFileDir(S))) ...

  2. Continuous Integration for iOS Apps with Visual Studio Team Services

    原文引用自:https://blog.xamarin.com/continuous-integration-for-ios-apps-with-visual-studio-team-services/ ...

  3. 最简单的例子理解Javascript闭包

    理解Javascript的闭包非常关键,本篇试图用最简单的例子理解此概念. function greet(sth){ return function(name){ console.log(sth + ...

  4. vs2010 :0X80041FEB 程序集无法修改版等内容

    AssemblyInfo.cs内容被清空或则格式有问题,无法修改,一个问题搞了8个小时  gisoracle 2018.09.22 包括加入现在项目,加入form多,都不正常,不能显示,一次稍加几个

  5. Python:Opening Python Classes

    I won’t reply to that post much, because it’s mostly… well, not useful to respond to. But people oft ...

  6. Swift - 添加纯净的Alamofire

    Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看.  . 下载Alamofire (https://github.com/Alamofire/Ala ...

  7. QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据

    QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 參考链接: http:// ...

  8. Android:客户端和服务器之间传输数据加密

    Android客户端与服务器进行数据传输时,一般会涉及到两类数据的加密情况,一类是只有创建者才能知道的数据,比如密码:另一类是其他比较重要的,但是可以逆向解密的数据. 第一类:密码类的数据,为了让用户 ...

  9. 为何要对URL进行编码

    为何要对URL进行编码 我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割.如"?na ...

  10. MySQL中的IFNULL,IF,NULLIF函数

    MySQL中的IFNULL函数和IF函数 MySQL中的IFNULL函数类似于Oracle中的NVL函数,其表达式为:IFNULL(expr1,expr2),含义是:如果第一个参数不为空,则返回第一个 ...