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

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://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










本文转自我也是个傻瓜51CTO博客,原文链接:http://www.cnblogs.com/liweis/p/7195013.html ,如需转载请自行联系原作者




相关文章
|
JavaScript
Vue中的深度监听Deep Watch
Vue中的深度监听Deep Watch
693 0
|
1月前
|
存储 人工智能 Serverless
AI时代最大的宝藏,也藏得最深:80%的企业知识沉睡在非结构化数据中
2026年AI进入应用爆发期,但非结构化数据成为瓶颈。Hologres推出AI原生新架构HSAP 2.0,融合语义搜索、多维分析与Serverless弹性,打造统一数据平面,让企业海量数据高效赋能AI,破解“数据熵”难题,支撑智能客服、销售助手等复杂场景,实现从“为人服务”到“为AI服务”的跨越。
|
设计模式 数据安全/隐私保护
【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
1280 0
【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
|
Web App开发 安全 中间件
谷歌、火狐、Edge等浏览器如何使用ActiveX控件
allWebPlugin 是一款为用户提供安全、可靠且便捷的浏览器插件服务的中间件产品,支持 Chrome、Firefox、Edge 和 360 等浏览器。其 V2.0.0.20 版本支持一个页面加载多个插件,并解决了插件与浏览器之间的焦点问题。用户可通过“信息化系统 + allWebPlugin + 插件 + 浏览器”的解决方案实现 ActiveX 插件的无缝集成。下载地址见文末,安装包含详细说明。
4158 122
|
11月前
|
机器学习/深度学习 人工智能 算法
热门论文推荐:TPDiff、Block Diffusion、Reangle-A-Video、GTR
由新加坡国立大学Show Lab的Lingmin Ran和Mike Zheng Shou提出,TPDiff是一个创新的视频扩散模型框架,针对视频生成的高计算需求问题,通过分阶段逐步提高帧率优化了训练和推理效率。核心贡献包括提出“时间金字塔”方法和阶段式扩散训练策略,实验表明训练成本降低50%,推理效率提升1.5倍。
207 0
|
11月前
|
人工智能 文字识别 自然语言处理
1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!
Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。
1390 1
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
415 1
|
缓存 JavaScript UED
vue的动态组件 keep-alive
【10月更文挑战第6天】
387 3
|
安全 Linux
Rocky Linux 或 AlmaLinux 哪个更优秀?
Rocky Linux 或 AlmaLinux 哪个更优秀?
4234 2
|
运维 网络协议 Linux
【Linux】CentOS网络故障排查大揭秘: 实战攻略解读
【Linux】CentOS网络故障排查大揭秘: 实战攻略解读