asp.net Aspose.Word 利用邮件合并功能 操作word模板 生成word。asp.net NPOI 对excel进行操作,生成excel

实现的方法,貌似有很多 如果是 c/s 架构的c# 可以用, vsto .如果是 vs2008 那么是支持 office 2003 和 office 2007 ,如果是 vs2010,它自带的 vsto 4.0 支持 office 2007 和 office 2010.比较强大。

但是如果是 b/s 项目呢?有以下3种第三方控件可以使用。本次采用 Aspose.Word 来使用。

1:把word 转换成 xml ,然后在 xml 里面 把需要修改的文字改成一个标签,然后通过 asp.net 获取数据库的值来替换 xml 里面的标签。

http://www.cnblogs.com/kevin-top/archive/2010/06/23/1763327.html

2:第三方控件之 weboffice (免费的)

http://www.cnblogs.com/dooom/archive/2010/07/03/1770450.html

官方网址:http://www.dianju.cn/p/weboffice/index.php 据说能上传,并且能在线编辑。

3: 第三方控件之 OfficeOCXSetup http://www.cnblogs.com/xiyang1011/archive/2010/12/05/1897255.html

4:Aspose.Word,可以预先用word 自己定义模板,插入各种域mergefield/书签MarkBook,利用Aspose.Word生成最终word。

由于我所在的公司,之前用的就是 word插入域+access来进行邮件合并制作word文档的,所以这个对我来说比较合适。最后的代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Aspose.Words;  //把Aspose.Words.dll 放在bin 目录下 ,记得在项目上引用一下
using System.Data;
using System.Data.OleDb;  //因为我用的是 access  

namespace asp.net_生成word_Aspose.Words
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string temDocPath = Server.MapPath("~/word模板/2-政府文件NC1.doc");
            Aspose.Words.Document doc = new Document(temDocPath);
            
            //获取doc里面的 域名字
            var all = doc.MailMerge.GetFieldNames() ;

            //显示出来
             
            foreach (var item in all)
            {
                Response.Write(item.ToString()+"<br>");
            }
            
            //建立一个和 access 的链接
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/数据库/NC2-2.mdb"));
            conn.Open();
            OleDbCommand cmd = new OleDbCommand("select * from list", conn);

            OleDbDataReader dr = cmd.ExecuteReader();
            string fileName = "";
             
            while (dr.Read())
            {
               fileName = dr["coen"].ToString();
            }

            dr.Close();
            dr = cmd.ExecuteReader();

            Bookmark mark = doc.Range.Bookmarks["companyEn"];  //这里我是测试了一下 用书签来 替换
            mark.Text = "张三公司";
            doc.Range.Bookmarks.Clear(); //清除掉多的,没有用到的书签

            string date = DateTime.Now.ToString("yyyyMMdd");

            doc.MailMerge.Execute(dr);
            string fileTitle = "/生成的word/" + fileName + date + ".doc";
            fileName = Server.MapPath("~/生成的word/" + fileName + date + ".doc");
            //fileName = "c:/joey.doc";   //居然可以保存到C盘
            doc.Save(fileName);  //保存到文件夹指定的地方 存为doc

            litResult.Text = "<a href='" + fileTitle + "' target='_blank'>点击下载</a>";
            //doc.Save(Response, "out.doc".ToString(), ContentDisposition.Attachment, null);  //保存为doc,浏览器直接提示下载
            conn.Close();
           
        }
    }
}

参考页面:http://www.cnblogs.com/linwinfan/archive/2010/01/07/1641340.html (通过在指定的地方,插入->域,选择MergeField,然后再用邮件合并的方式,来合成word文档,word直接下载,并且有将图片转换到word文档的方法 )

http://www.cnblogs.com/sendrylee/archive/2010/04/01/1702463.html (通过在指定的地方,插入->书签,选择 BookMark,然后在用asp.net代码来替换掉书签的txt文本,注意,书签可以把文字选中之后,再设置为书签,实际感觉和域 差不多,域有特殊的<<>>符号,但是如果我们把书签是 选择中文字,然后再插入的书签,也一样可以看得出来的。书签必须是英文,域好像也是英文。带破解版下载地址 附:Aspose.Words for NET 6.5 破解版下载地址 (版本比较低 ))

http://hi.baidu.com/leilongbing/blog/item/439c5a18201bed69dab4bd83.html 特别讲到如何用 Aspose.Words 对 doc 文档的节点进行编辑

参考页面:http://www.cnblogs.com/xiyang1011/archive/2011/04/30/2033324.html (有讲到 增加页脚,和 在word中增加图片,以及循环生成表格的行)

Aspose.Words for .NET Samples

相关参考页面:

1:使用Aspose.Words把word转成图片,但如何设置图片的大小。求解!!!http://q.cnblogs.com/q/32082/

2:Aspose.Words 导出图片到Word指定位置http://q.cnblogs.com/q/28185/

asp.net NPOI 对excel进行操作,生成excel

详细教程:http://tonyqus.sinaapp.com/

教程1:http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html

教程2:http://www.dotblogs.com.tw/killysss/archive/2010/01/27/13344.aspx