Aspose.Words把DataTable 中的数据导出到word中


一、首先我们新建模板===================================================================================

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文档中的数据表格

 

猜你喜欢

转载自blog.csdn.net/gongyuan303/article/details/6790444