先看效果
有客户数据,放个缩小图,可以看到里面包含若干个不同客户/供应商的对账单,每个对账单分页
模板设置
主要就是两个TableStart和TableEnd嵌套使用:
合并操作
关系设置
因为是主丛表,所以要设置两个表之间的关系,例如像下面这样设置:
dataset.Relations.Add(dataset.Tables[0].Columns["cCusCode"], dataset.Tables[1].Columns["cCusCode"]);
合并
Aspose.Words真是个良心作品,使用起来很简单,获取数据源之后用很少的代码就能完成。
//载入模板
var doc = new Document(Program.receivableTemplate);
//合并模版,相当于页面的渲染
doc.MailMerge.ExecuteWithRegions(dataset);
保存
winform的,保存到磁盘:
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "Word97-2003文件(*.doc)|*.doc|Word文件2007版(*.docx)|*.docx";
dialog.RestoreDirectory = true;
//点了保存按钮进入
if (dialog.ShowDialog() == DialogResult.OK)
{
string localFilePath = dialog.FileName.ToString(); //获得文件路径
string fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //获取文件名,不带路径
doc.Save(localFilePath);
if (MessageBox.Show("文件已经保存到:" + localFilePath + "\n\n是否查看?", "保存成功", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
System.Diagnostics.Process.Start(localFilePath);
}
}
要点
- 两个TableStart/TableEnd嵌套,要求Aspose.Words版本是8以上,不然会出错。
- 分页的问题,主表的TableEnd要在分页符后面。并且主表的TableEnd后面的内容会被清除,合并后就没有了,TableStart前面的内容也会被清除(没试)。