C#将服务器端excel文件下载到客户端的简单方法

来源:互联网 发布:ecshop3.6php版本 编辑:程序博客网 时间:2024/05/16 14:55

上网查了很多方法,可是没有一个方法我测试成功的,然后我就用了一个比较笨但是还算可以用的方法。就是直接将服务器端文件路劲传到前台,用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效果:






原创粉丝点击