当前位置:首页 > 使用Asp.Net生成Word文档并直接下载

使用Asp.Net生成Word文档并直接下载

点击次数:1550  更新日期:2010-12-30
\n

在网站的使用中,有时候需要把数据库里面的内容生成到word文档里面,然后下载到本地进行查看,使用VS.NET就可以实现这个功能,下面这个例子就简单到实现了服务器端生成word文档并提供下载的功能,虽然没有彻底地把整个操作写出来(尤其是写生成word的时候),但整个流程是完成了的,至于其中更详细的内容,请参阅MSDN(基本上都是E文,=_=!!!)。


\n


\n

开发环境:VS2005 + Windows2003(IIS6) + Office2003


\n

使用到的模板文件(d:\\Temp.dot),关于如何使用office模板,请参阅office:


\n

头:


\n


\n

脚:


\n


\n


\n

之前必须提到的有一点,就是权限的问题,这种对硬盘上非web目录是需要权限的,看了一下别人的发言之类的,发觉应该在组件管理器里面吧word组件的权限开给Network Service(Windows2003),但是打开系统的管理器,发觉怎么也设置不了,汗!!上次我写IIS操作的时候还可以用咧,可能是我把系统的什么服务关掉了引起的。也没有去仔细找,就按照前面ASP.NET操作IIS的那篇文章在web.config里面加了一条


\n

<identity impersonate=”true” userName=”administrator” password=”XXXXX”/>


\n

如果哪位朋友知道,也给我留个言,先谢谢啦~~~~~~


\n


\n

在本例中,用到的是MS的word组件(Microsoft.Office.Interop.Word.dll),所以先在项目里面添加引用,如图:


\n


\n


\n

CreateWord.cs文件里面添加:


\n

using System.Reflection;


\n

using Microsoft.Office.Interop.Word;


\n


\n

然后在按钮事件里面添加如下代码:


\n

ApplicationClass wordApp = new ApplicationClass();


\n

object missing = System.Reflection.Missing.Value;


\n

object tempName = @”d:\\Temp.dot”; // 模板名称,本例中的模板如后面的图


\n

object docName = @”D:\\WebSite\\a.doc”; // 生成的word文件,可以不放在web目录下,当然,实际应用中可能会涉及到动态生成文件名,相信这点难不倒你吧 ^_^


\n


\n

// 生成新文档,这里使用了上面提到的模板,如果不想使用指定的模板,可使用missing,这是会使用默认的模板。关于生成word文件的几个方法,参阅MSDN


\n

Document MyDoc = wordApp.Documents.Add(ref tempName, ref missing, ref missing, ref missing);


\n


\n

wordApp.Visible = true;


\n

MyDoc.Activate();


\n


\n

wordApp.Selection.Font.Size = 30; // 字体大小


\n

wordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; // 居中


\n

wordApp.Selection.Font.Bold = (int)WdConstants.wdToggle; // 黑体


\n

// 还有很多很多的格式可以在这里设置,发挥你的想像力尽情研究吧,吼吼http://www.dwww.cn ~~~~~~~~


\n


\n

wordApp.Selection.TypeText(“hello”); // 文字内容,这里我没有从数据库里面读取,只是测试了一下写入的内容


\n


\n

// 保存word文档


\n

MyDoc.SaveAs(ref docName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);


\n


\n

// 关闭,释放


\n

MyDoc.Close(ref missing, ref missing, ref missing);


\n

wordApp.Quit(ref missing, ref missing, ref missing);


\n

MyDoc = null;


\n

wordApp = null;


\n


\n

Response.Redirect(“DownloadWord.aspx?id=” + “a.doc”);


\n

下载页面的代码(DownloadWord.aspx.CS):


\n

string FullFileName = Request.QueryString["id"];


\n

FileInfo DownloadFile = new FileInfo(HostingEnvironment.ApplicationPhysicalPath + FullFileName); // 需要转换为绝对路径,否则会自动认到C盘系统里那个IIS目录下面去,而且,无法通过URI的方式来进行数据流读取。如果你生成的文件不在web目录下,也需要明确指出。


\n

// 下面到就是读取文件,通过数据流的方式下载了。


\n

Response.Clear();


\n

Response.ClearHeaders();


\n

Response.Buffer = false;


\n

Response.ContentType = “application/octet-stream”;


\n

Response.AppendHeader(“Content-Disposition”, “attachment;filename=” + HttpUtility.UrlEncode(FullFileName, System.Text.Encoding.UTF8));


\n

Response.AppendHeader(“Content-Length”, DownloadFile.Length.ToString());


\n

Response.WriteFile(DownloadFile.FullName);


\n

Response.Flush();


\n

Response.End();


\n


\n

整个操作的过程如图:


\n

页面:


\n


\n


\n

点击按钮:


\n


\n


\n

保存后打开:


\n


\n


\n


\n

可见模板已被正确的使用并且内容已经被写入到word文档里面去了!


\n


\n

欢迎探讨!!


\n


来源:http://blog.csdn.net/cqfeng

\n