asp.net导出Excel问题!

JiaoPengJay 2010-11-22 03:24:12
以下是导出Excel的方法
调用的时候是CreateExcel(dt,"A.xls");其中的dt是有值的

public void CreateExcel(DataTable dt, string FileName)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
resp.ContentType = "application/ms-excel";
string colHeaders = "", ls_item = "";
int i = 0;

//定义表对象与行对像,同时用DataSet对其值进行初始化
//DataTable dt = ds.Tables[0];
DataRow[] myRow = dt.Select("");
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
for (i = 0; i < dt.Columns.Count; i++)
{
if (i != dt.Columns.Count - 1)
{
colHeaders += dt.Columns[i].Caption.ToString() + "\t";
}
else
{
colHeaders += dt.Columns[i].Caption.ToString() + "\n";
}
}
//向HTTP输出流中写入取得的数据信息
resp.Write(colHeaders);
//逐行处理数据
foreach (DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for (i = 0; i < row.ItemArray.Length; i++)
{
if (i != row.ItemArray.Length - 1)
{
ls_item += row[i].ToString() + "\t";
}
else
{
ls_item += row[i].ToString() + "\n";
}
}
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
resp.Write(ls_item);
ls_item = "";
}
//写缓冲区中的数据到HTTP头文件中
resp.End();
}

也能导出Excel文件,但是打开该文件时提示说该文件格式与文件扩展名指定的格式不一致。
打开后没有换行
我插入断点获取到
这是代码中colHeaders(列标题) 的值:id\tName\tArea\tSort\tTime\tTel\tAddress\tHuiYuan\tMeanConsum\tWaiMai\tYeXiao\tMeTel\tPhoto\tListPath\n

ls_item (行中的值):
1\t凤中凰\t普陀区\t川菜,本地特色\t上海市普陀区宜川路328号(近延长西路)\t暂无\t其它\t无\t无\t02156941060 \thttp://sh.fandian.com/catalog/chuancai-1.html\n

请高手解答
...全文
304 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
deoing 2010-11-24
  • 打赏
  • 举报
回复
可以让客户直接下载Excel,或者创建一个动态页面,把服务器端的Excel通过流方式下载,下载完成删掉就可以了。
JiaoPengJay 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 deoing 的回复:]
可以让客户直接下载Excel,或者创建一个动态页面,把服务器端的Excel通过流方式下载,下载完成删掉就可以了。
[/Quote]
谢谢这位仁兄,我已经解决啦!再次感谢你的回复!
还是在凌晨啊!谢谢
JiaoPengJay 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 deoing 的回复:]
可以使用MyXls来输出Excel表格,可以参与下面的操作类:
http://www.guaik.com/cs/SOF1OQYDSLN0HGQR.shtm
[/Quote]
问题又来啦!你这个是把文件保存在服务器端的,我想要的是保存在客户端
能不能帮我解决啊!
JiaoPengJay 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 deoing 的回复:]
可以使用MyXls来输出Excel表格,可以参与下面的操作类:
http://www.guaik.com/cs/SOF1OQYDSLN0HGQR.shtm
[/Quote]
解决啦!谢谢大家。
deoing 2010-11-22
  • 打赏
  • 举报
回复
可以使用MyXls来输出Excel表格,可以参与下面的操作类:
http://www.guaik.com/cs/SOF1OQYDSLN0HGQR.shtm
zhangshuqiang123 2010-11-22
  • 打赏
  • 举报
回复
看起来跟我的winform里面有点不太一样
yan267 2010-11-22
  • 打赏
  • 举报
回复


你用html画表格,不要用/t来。
要不用Excel.dll导出,

我看你代码好像也没有错。

JiaoPengJay 2010-11-22
  • 打赏
  • 举报
回复
我试过啦!还是不行啊!
lchy110 2010-11-22
  • 打赏
  • 举报
回复
去搜下 NPOIHelper

用这个导出貌似性能比较好
yan267 2010-11-22
  • 打赏
  • 举报
回复


int i = 0;
int cl = dt.Columns.Count;

//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
string[,] head ={
{"",""},
{"Campaign_Email","Email address"},
{"Campaign_HasSend","Sent Success?"},
{"Campaign_HasOpen","Email opened‎?"},
{"cLink1","Click Link1 "},
{"cLink2","Click Link2"},
{"cLink3","Click Link3"},
{"HasSend_dt","Sent date"},

};

for (i = 0; i < head.GetLength(0); i++)
{
if (i == cl - 1)//最后一列,加n
{
colHeaders += head[i, 1].ToString() + "\n";
}
else
{
colHeaders += head[i, 1].ToString() + "\t";
}

}
// for(i=0;i<cl;i++)
// {
// if(i==(cl-1))//最后一列,加n
// {
// colHeaders +=dt.Columns[i].Caption.ToString() +"\n";
// }
// else
// {
// colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
// }
//
// }
resp.Write(colHeaders);
//向HTTP输出流中写入取得的数据信息

//逐行处理数据
foreach (DataRow row in myRow)
{
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
for (i = 0; i < cl; i++)
{
if (i == (cl - 1))//最后一列,加n
{
ls_item += (row[i] == System.DBNull.Value ? "" : row[i].ToString()) + "\n";
}
else
{
ls_item += (row[i] == System.DBNull.Value ? "" : row[i].ToString()) + "\t";
}

}
resp.Write(ls_item);
ls_item = "";

}
string FootCount = "";
JiaoPengJay 2010-11-22
  • 打赏
  • 举报
回复
先谢谢啦,我等会试试!
ruiandli 2010-11-22
  • 打赏
  • 举报
回复
别忘了还要导入以下using
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
ruiandli 2010-11-22
  • 打赏
  • 举报
回复
希望可以帮到你

protected void xueqibiaobao_Click(object sender, EventArgs e)//学生学期考勤信息生成方法
{
string str8 = "select xueqi,classname,xuehao,stname,leixing,count(*) as cishu from tb_kaoqin where xueqi='" +
xueqitjb.SelectedValue + "' and classname='" +
xueqibanji.Text + "' group by xueqi,classname,xuehao,stname,leixing";


DataSet st = db.GetDs(str8);
StringWriter sw = new StringWriter();
sw.WriteLine("学期,班级,学号,姓名,类型,累计");
foreach (DataRow dr in st.Tables[0].Rows)
{
sw.Write(dr[0].ToString() + ",");
sw.WriteLine(dr[1].ToString() + "," + dr[2].ToString() + "," + dr[3].ToString() + "," + dr[4].ToString() + "," + dr[5].ToString());


}
sw.Close();

string name = System.DateTime.Today.ToString("yyyy年MM月dd日") + ".csv";

Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name));

Response.ContentType = "application/ms-excel";

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

Response.Write(sw);

Response.End();
}
JiaoPengJay 2010-11-22
  • 打赏
  • 举报
回复
没人,自己顶!

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧