您的位置:首页 > 编程语言 > ASP

使用ASP.NET生成Word文档并直接下载

2010-06-08 11:45 585 查看
 有以下思路步骤1: 在本例中,用到的是MS的word组件(Microsoft.Office.Interop.Word.dll),所以先在项目里面添加引用, 在CreateWord.cs文件里面添加:

using System.Reflection; using Microsoft.Office.Interop.Word;


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

ApplicationClass wordApp = new ApplicationClass();

object missing = System.Reflection.Missing.Value;

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

object docName = @"D:WebSitea.doc"; // 生成的word文件,可以不放在web目录下

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

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

wordApp.Visible = true;

MyDoc.Activate();

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

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

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

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

// 保存word文档

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);

// 关闭,释放

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

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

MyDoc = null;

wordApp = null;

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

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

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

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

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

Response.Clear();

Response.ClearHeaders();

Response.Buffer = false;

Response.ContentType = "application/octet-stream";

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

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

Response.WriteFile(DownloadFile.FullName);

Response.Flush();

Response.End();


步骤2: 因为一个浏览器只能下载一个文件.因此,你们以在后台把这个文件夹压缩成RAR的形式,现在下载.或者用另外一个方法.JS配合服务端

<script   language=javascript>
function   downFiles(arrFileName)
{
for(var   i   =   0;i <arrFileName.length;i++)
{
window.open( "downFile.aspx?fileName= "   +   arrFileName[i];
}
}
var   arr   =   " <%=fileNames%> .split( ": ");
downFiles(arr);
//CS
public   string   fileNames
{
get
{
return   "1.txt:2.txt:3.txt ";
}
}


结合两思路:可实现使ASP.NET 客户端用户同时下载多个文件

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息