一、首先我们新建模板===================================================================================
Word Office2007创建的模版,单击顶部的下拉按钮,在下拉框中选择其他命令。
在下一个页面中选择“不再功能区中的命令—文本域—添加—确定”即可。
即可看到添加文本域的按钮
下面就来创建模版(就是你要导出的格式模版)
点击ab| 新建文本域,双击黑色模块,就可以填写标签。
这里的标签就是你要输入数据的字段名称。。如果你给出格式就可以打印表的样式。。这里我在模版中有个例子,供大家下载使用。。
添加数据后就是..
二、实现代码==================================================================================
调用的方法
Dt你要传入的数据DataTable
table 模版的名称
title 标题的名称
public void SetWord(DataTable dt, string table, string title)
{
string numstr = table.Substring(5, 6);
string newtemplate = "template" + numstr + ".doc";
string tmppath = Server.MapPath("~//NDocument//wordSort//" + newtemplate);
Document doc = new Document(tmppath); //载入模板
DocumentBuilder builder = new DocumentBuilder(doc);
DataTable products = dt; //数据源
int count = 0;
string newtitle = "lbl" + numstr;
if (doc.Range.Bookmarks[newtitle] != null)
{
Bookmark mark = doc.Range.Bookmarks[newtitle];
mark.Text = title;
}
//记录要显示多少列
for (var i = 0; i < products.Columns.Count; i++)
{
string b = products.Columns[i].ColumnName.Trim() + numstr;
if (doc.Range.Bookmarks[b] != null)
{
Bookmark mark = doc.Range.Bookmarks[b];
mark.Text = "";
count++;
}
}
System.Collections.Generic.List<string> listcolumn = new System.Collections.Generic.List<string>(count);
for (var i = 0; i < count; i++)
{
builder.MoveToCell(0, 0, i, 0); //移动单元格
if (builder.CurrentNode.NodeType == NodeType.BookmarkStart)
{
string a = (builder.CurrentNode as BookmarkStart).Name;
listcolumn.Add((builder.CurrentNode as BookmarkStart).Name);
}
}
double width = builder.CellFormat.Width;//获取单元格宽度
builder.MoveToBookmark(table); //开始添加值
int total = products.Rows.Count;
int num = Convert.ToInt32(total / 2 + total % 2);
if (num % 2 == 1)
{
num = num + 1;
}
for (var m = 0; m < num; m++)
{
int j = num + m;
for (var i = 0; i < 6; i++)
{
builder.InsertCell(); // 添加一个单元格
builder.CellFormat.Borders.LineStyle = LineStyle.Single;
builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
builder.CellFormat.Width = width;
builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
if (i < 3)
{
string name = products.Rows[m][listcolumn[i].ToString().Replace(numstr, "")].ToString();
builder.Write(name);
}
else if (j < total)
{
string name = products.Rows[j][listcolumn[i - 3].ToString().Replace(numstr, "")].ToString();
builder.Write(name);
}
}
builder.EndRow();
}
doc.Range.Bookmarks[table].Text = ""; // 清掉标示
Random ro = new Random();
string stro = ro.Next(100, 100000000).ToString();//产生一个随机数用于新命名的图片
string newName = DateTime.Now.ToString().Replace("-", "").Replace(":", "").Replace(" ", "") + stro + ".doc";
doc.Save(newName, SaveFormat.Doc, SaveType.OpenInWord,Page.Response);
}
三 附件:附:Aspose.Words for NET 6.5破解版下载地址
由于时间关系 ,后续将实例的源码加上。
我非常喜欢交朋友,大家相互学习,一起成长。
源文档学习地方 SendryLee的文章http://www.cnblogs.com/sendrylee/archive/2010/04/01/1702463.html (用Aspose.Words for .NET动态生成word文档中的数据表格)