日期:2014-05-19  浏览次数:20541 次

数据库中的数据导到Excel的问题
我想将数据库中的数据每条记录导成一页怎么实现?

------解决方案--------------------
你可以把数据库取到DataTable中,然后把这个DataTable中的数据以http流的方式输出到Excel

//将StringWriter 以流的形式导出excel,excel文件名为exportFileName
protected void ExcelExport(StringWriter sw, string exportFileName)
{
Response.ContentEncoding = System.Text.Encoding.GetEncoding( "GB2312 ");
//避免文件名为乱码
string fileName = HttpUtility.UrlEncode(exportFileName, Encoding.UTF8);
string str = "attachment; filename= " + fileName + ".xls ";

Response.AppendHeader( "Content-Disposition ", str);
Response.ContentType = "application/ms-excel ";
Response.Write(sw);
Response.End();
}

//将datatable中的数据进行组装,比如添加列头(这样excel文件中第一行就看到列头名称)
public static StringWriter GetStringWriter(DataTable dt)
{
StringWriter sw = new StringWriter();

//先写列的表头,这样保证如果没有数据也能输出列表头
sw.Write( "学号 " + "\t ");
sw.Write( "姓名 " + "\t ");
sw.Write(sw.NewLine);

//如果包含数据
if (dt != null)
{
//写数据
foreach (DataRow dr in dt.Rows)
{
sw.Write(dr[ "StudentId "].ToString() + "\t ");
sw.Write(dr[ "StudentName "].ToString() + "\t ");
//换行
sw.Write(sw.NewLine);
}
}
sw.Close();
return sw;
}

//在页面的导出按钮事件代码
protected void Button1_Click(object sender, EventArgs e)
{
DataTable dt = (根据条件从数据库得到所要的数据);
ExcelExport(GetStringWriter(dt), “导出的Excel文件名”);
}

接分!

------解决方案--------------------
private void Page_Load(object sender, System.EventArgs e)
{
Excel();
// 在此处放置用户代码以初始化页面
}
private void Excel(){
DataGrid1.DataSource =****************;//自己根据需要绑定数据源
DataGrid1.DataBind ();
Response.ContentType = "application/vnd.ms-excel ";
Response.Charset = " ";
EnableViewState=false;
System.IO .StringWriter tw=new System.IO.StringWriter ();
System.Web .UI .HtmlTextWriter hw=new HtmlTextWriter (tw);
DataGrid1.RenderControl (hw);
Response.Write (tw.ToString ());
Response.End() ;
}
页面载入时,就会弹出一个保存/打开文件对话框,非常符合用户的要求
------解决方案--------------------
参考:select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
set rowcount n
select * from 表变量 order by columnname desc
------解决方案--------------------
一条记录一页
*******************
如果一条记录一页,并且每一页就导出为一个excel文件,那好办。只要先把数据读到DataTable,然后遍历DataTable中的每一DataRow,分别导出成一个Excel文件。
如果你想只导出一个excel文件,并且该excel文件包含多个sheet,每个sheet包含一条记录,那么我想你需要office automation编程了。这样的话需要在服务端安装office,并且配置DCOM组件,安全性和性能都会大大影响。网上office automation编程资料很多,你自己查查好了
------解决方案--------------------
那就多输出几个
sw.Write(sw.NewLine); 吧