通过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的问题。。。。
跪求路过大神指点~~~~~~··
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的问题。。。。
跪求路过大神指点~~~~~~··
相关文章推荐
- Dijkstra算法(单源最短路径,单源分别是终点和起点)
- 通过Response输出方式导出Excel
- Combination Sum II
- Fedora10 配置使用root用户登录
- mybatis连接mysql数据库实现的jdbc功能
- Floyd算法,求图中两个点之间的最短距离
- 利用ListView实现新闻客户端的新闻内容图文混排
- TL 栈,队列,优先队列用法
- KBMMW 4.82.00 发布
- java个人学习笔记:位运算符
- 最小顶点数就能覆盖所有边==二分图的最大匹配
- 给老师的建议?????
- NOI2005 维修数列(综合包括求区间的最大值)---Splay
- PostgreSQL function里面调用function
- hdu3487 (splay伸展树 区间翻转,切割,插入)
- Combination Sum
- Android TextView里直接显示图片的三种方法
- HTML 表单(form) 使用详解
- Redhat6.2升级为Redhat6.3 (linux内核升级)
- 回调函数理解-以Fragment为例