您的位置:首页 > 其它

通过Response输出方式导出Excel

2015-05-31 09:54 363 查看
        目前见过这么几种类型的导出Excel表:

        1,NPIO方式,高仿Java.功能比较强大,但是比较重。

        2, 前辈封装的。。。。

           3,本文要说的。。

        

  这周五又要导个Excel表,

,上面估计是觉得平台封装的导出比较重吧,要我用response方式导出excel表,一个字,没用过。还好上过百度大学~

           /// <summary>
/// 获取表的标头
/// </summary>
/// <param name="caption">The caption.</param>
/// <returns>System.String.</returns>
/// <remarks>Editor:v-liuhch CreateTime:2015/5/30 19:44:44</remarks>
private string GetHeaderName(string caption)
{
string headName = string.Empty;
switch (caption)
{
case "SerialNo":
headName = "SN码";
break;
case "PrizeName":
headName = "奖品名称";
break;
case "TelPhone":
headName = "领取电话 ";
break;
case "NickName":
headName = "姓名";
break;
case "AwardingTime":
headName = "领取时间";
break;
case "OkPrizeTime":
headName = "抽中时间";
break;
default:
headName = " ";
break;
}
return headName;
}

         上面一段是获取列标题的。

         接着是导出的过程:

       private void ExportSN(HttpContext context)
{
string accode = context.Request.QueryString["accode"];
HttpResponse response = context.Response;
string fileName = "SN码导出表-" + DateTime.Now.ToShortDateString();
excelHeader = string.Empty;
excelContent = string.Empty;

DataTable dt = PrizeAdapter.Instance.SnManagerData(accode);//获取数据源
DataRow[] dr = dt.Select();
int colCount = dt.Columns.Count;
string headName = string.Empty;

//行标题
for (int i = 0; i < colCount; i++)
{
headName = GetHeaderName(dt.Columns[i].Caption);
if (i == colCount - 1)
{
excelHeader += headName + "\n";
}
else
{
excelHeader += headName + "\t";
}
}

//行数据
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < colCount; i++)
{
if (i == colCount - 1)
{
excelContent += row[i].ToString() + "\n";
}
else
{
excelContent += row[i].ToString() + "\t";
}
}

}

// ExportGotPrizeSn(context);

response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
response.ContentType = "application/vnd.ms-excel";
response.AppendHeader("Content-Disposition", "attachment; filename=test.xls");
response.Write(excelHeader);
response.Write(excelContent);
response.Flush();
response.End();

}

       这里要注意指定的contenttype.

       但是始终有一个历史遗留问题搞不定:

       打开导出的Excel表的时候始终提示:

    


      

        有人说还是代码写的有问题,也有人说是Office的问题。。。。

 

          跪求路过大神指点~~~~~~··

      

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