通过MegerField来循环,将数据保存到dataset的table中,dataset通过关联datarelation字段来指定主从表关系。模板中通过标签TableStart和TableEnd来框定table的作用范围,主从表可以多层嵌套。
aspose.words下载
1>画模板,用wps或微软的office画出下图表格,其中带《》的文本是域。嵌套循环用TableStart和TableEnd来界定作用范围。
1.1>wfs添加域,插入>>文档部件>>域>>邮件合并,见图一
1.2> office添加域,插入>>文档部件>>域>>MergeField,见图二
图一
图二
2>代码部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | string templateFile = Server.MapPath( "score_tmplt.doc" ); string savePath = Server.MapPath( "score.doc" ); //用户表(主表) DataTable userTable = new DataTable( "UserList" ); userTable.Columns.Add( new DataColumn( "Id" , typeof ( int ))); userTable.Columns.Add( "UserName" ); userTable.Columns.Add( "Gender" ); userTable.Columns.Add( "BirthDay" ); userTable.Columns.Add( "Address" ); userTable.Rows.Add(1, "菜鸟程序员1" , "男" , "83年" , "武汉" ); userTable.Rows.Add(2, "菜鸟程序员2" , "男" , "88年" , "武汉" ); //分数表(从表) DataTable userScoreTable = new DataTable( "ScoreList" ); userScoreTable.Columns.Add( new DataColumn( "UserId" , typeof ( int ))); userScoreTable.Columns.Add( new DataColumn( "Id" , typeof ( int ))); userScoreTable.Columns.Add( "Name" ); userScoreTable.Columns.Add( "Score" ); userScoreTable.Rows.Add(1, 1, "文科" , "100" ); userScoreTable.Rows.Add(1, 2, "理科" , "100" ); userScoreTable.Rows.Add(2, 3, "文科" , "100" ); //载入模板 var doc = new Document(templateFile); //提供数据源 DataSet dataSet = new DataSet(); dataSet.Tables.Add(userTable); dataSet.Tables.Add(userScoreTable); <br> //建立主从报表的关联 dataSet.Relations.Add( new DataRelation( "ScoreListForUser" , userTable.Columns[ "Id" ], userScoreTable.Columns[ "UserId" ])); //合并模版,相当于页面的渲染 doc.MailMerge.ExecuteWithRegions(dataSet); doc.Save(savePath); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2015-08-09 四大开源协议比较:BSD、Apache、GPL、LGPL
2015-08-09 LGPL 与GPL的区别