您的位置:首页 > 其它

将GridView或其他页面元素导出到Word

2007-12-04 14:18 337 查看
常常有用户提出将页面导入到Word,供他们对格式和文字做修改。在ASP时代,需要开发人员使用VBA,但是现在,可以使用一种更简的方法了。

首先,使用<div runat = "server" id = "divPrint"><div>这样的容器将需要导入到Word中的内容包起来。然后,在页面中添加一个打印按钮,并在其事件处理函数中添加如下事件:

protected void btWord_Click(object sender, EventArgs e)
{

Response.Clear();
Response.Buffer = true;
Response.Charset = "utf-8";
//下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开
//filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm  

Response.AppendHeader("Content-Disposition", "attachment;filename=Reports.doc");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");

//Response.ContentType指定文件类型 可以为application/ms-excel    application/ms-word    application/ms-txt    application/ms-html    或其他浏览器可直接支持文档 
Response.ContentType = "application/ms-word";
this.EnableViewState = false;
}

此外,还要在页面中添加这样一个函数:

public override void VerifyRenderingInServerForm(Control control)
.{
// Confirms that an HtmlForm control is rendered for
}

还要将页面的“EnableEventValidation”属性设置为"false",这样一来,点击导入到Word按扭后,就可以将div中的数据呈现于Word中了。

这种方法除了可以导入到Word以外,还支持Excel、txt 等等。

有些时候,用户还要求我将数据导入到Word中后,与数据库拖离开,即显示的数据仅仅是一个纯HTML页面。因此,可以在Button事件函数中再加入如下代码,将数据写入一个HTML文件,并存放于某个目录中。

string fileName = Request.Form["ddlDate"] + ".htm";
Response.WriteFile(Server.MapPath("~/ProjectHome/Upload/" + fileName));
Response.End();

这种方法的一个弊端是在页面load之前,必须保证所有的数据都以得到,不然将无法导入成功。即

<%= ds.Tables[0].Rows[0]["ID"].ToString()%>

必须写成如下形式才行:

<%# ds.Tables[0].Rows[0]["ID"].ToString()%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: