上网查了很多方法,可是没有一个方法我测试成功的,然后我就用了一个比较笨但是还算可以用的方法。就是直接将服务器端文件路劲传到前台,用javascript设置a标签的href属性值,然后触发a标签的click事件,让其下载。
1)首先将dataset转换为excel文件,代码如下:
writeToExcel(){
/*
* *
* 将数据存储到datatable中便于导出到excel中,
* 我的数据是从sqlserver中取出来,存入到excel表中,然后存入到服务器端
*/
DateTime dayStart = Convert.ToDateTime( start + " " + starthour );
DateTime dayEnd = Convert.ToDateTime( end + " " + endhour );
//链接字符串,可以直接写,我这里是从web.config中取出来的
string strConn = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
string strsql = "你的sql字符串";//sql语句
using (SqlConnection conn = new SqlConnection(strConn))
{
using (SqlCommand cmd = new SqlCommand( strsql, conn ))
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
WenshuExl ws = new WenshuExl();//WenshuExl是自己定义的一个类,里面有下面的一些属性
ws.属性1 = reader.GetValue( 0 ).ToString();
ws.属性2 = reader.GetValue( 1 ).ToString();
ws.属性3 = reader.GetValue( 2 ).ToString();
ws.属性4 = reader.GetValue(3).ToString();
ws.属性5 = reader.GetValue( 4 ).ToString();
wenshu.Add(ws);
}
reader.Close();
}
}
DataTable dt = new DataTable();
//对应属性增加excel表格中的头到datatable中
dt.Columns.Add( "属性1", Type.GetType( "System.String" ) );
dt.Columns.Add( "属性2", Type.GetType( "System.String" ) );
dt.Columns.Add( "属性3", Type.GetType( "System.String" ) );
dt.Columns.Add( "属性4", Type.GetType( "System.String" ) );
dt.Columns.Add( "属性5", Type.GetType( "System.String" ) );
//添加每一行数据到datatable中
if (wenshu.Count > 0)
{
var i = 0;
foreach (var item in wenshu)
{
i++;
DataRow dr = dt.NewRow();
dr["属性1"] = item.属性1;
dr["属性2"] = item.属性2;
dr["属性3"] = item.属性3;
dr["属性4"] = item.属性4;
dr["属性5"] = item.属性5;
dt.Rows.Add( dr );
}
}
wenshu.Clear();
int rnum = dt.Rows.Count;//导出数据的行数
int cnum = dt.Columns.Count;//导出数据的列数
string diretory = Server.MapPath( "\\" ) + "OutFiles\\wenshuExl";
System.IO.Directory.CreateDirectory( diretory );//创建目录
string filename = Server.MapPath( "\\" + "OutFiles\\wenshuExl\\" ) + (DateTime.Now.ToString( "yyyyMMdd" ) + DateTime.Now.ToLongTimeString() + DateTime.Now.Millisecond.ToString()).Replace( ":", "" ) + ".xls";
string tempfile = filename;
string[] arrfile = tempfile.Split('\\');
string filepath = "/OutFiles/wenshuExl/" + arrfile[arrfile.Length-1];//得到项目当前的文件夹路劲
object missing = System.Reflection.Missing.Value;
//新建excel工作簿
Excel.Application excel = new Excel.Application();
Excel.Workbook work = excel.Workbooks.Add( true );
Excel.Worksheet wsh = (Excel.Worksheet)work.Worksheets[1];
int rowindex = 1;
int colindex = 0;
//打印title
foreach (DataColumn col in dt.Columns)
{
colindex++;
excel.Cells[1, colindex] = col.ColumnName;
}
//打印data
foreach (DataRow row in dt.Rows)
{
rowindex++;
colindex = 0;
foreach (DataColumn col in dt.Columns)
{
colindex++;
excel.Cells[rowindex, colindex] = row[col.ColumnName].ToString();
}
}
excel.DisplayAlerts = false;//不显示更改提示
excel.Visible = false;//让后台设置为不可见,为true的话会看到打开一个excel,然后数据在往里写
excel.AlertBeforeOverwriting = false;//禁止弹出覆盖的询问提示框
wsh.Columns.EntireColumn.AutoFit();
try
{
excel.ActiveWorkbook.SaveCopyAs( filename );
}
catch (Exception ex)
{
return "导出失败:" + ex.Message;
}
finally
{
excel.Quit();
excel = null;
System.GC.Collect();
}
return filepath;//将值返回到前台
}
2)前台代码:
<a href="" style=" display:none;" id="download"></a>
js代码:
$(function () {
$.post(
"/类名/writeToExcel",
{
属性:属性值
},
function (data) {
if (data.indexOf("/") >= 0) {
var filename = data;
$("#download").attr('href', filename);//将后台excel文件路径赋值给a标签的href
//绑定单击事件
$("#download").click(function () {
window.open($(this).attr("href"));
});
//触发单击事件
$("#download").click();
} else {
alert(data);
}
});
});
火狐效果:
chrom效果: