【!菜鸟提问:如何将一个DataGrid里的数据导出为Excel文件呢?!】

shuiyueer7 2005-09-14 03:00:45
菜鸟提问:如何将一个DataGrid里的数据导出为Excel文件呢?

在页面上已经取出数据库里的数据 N行M列

我想让用户按一个按钮就可以将DataGrid里的数据导出到本地为Excel文件

能做到吗? Waiting online~~~~~~~~~~~~~

语言:C# 谢谢
...全文
200 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iamding 2006-07-02
我都来发表一下,zhoumins(zm)的方法,用了他的方法,解决了困了我多天的问题,不过,有个问题是:不是改了输出流为简体中文了吗?点解还是乱码的呢?
  • 打赏
  • 举报
回复
shuiyueer7 2005-09-14
好多高手呀

谢谢楼上各位GG 8过我只会C# hehe

下班就结帖给分分了
  • 打赏
  • 举报
回复
oneway888 2005-09-14
就用这个吧,我就用的。
很好的。
<SCRIPT language="vbscript">
<!--
Function saveToExcel()
Set objXL = CreateObject("Excel.Application")
objXL.Visible = True
objXL.WorkBooks.Add()
Set objTB = document.all("dgdDetail")
For x=1 To objTB.rows.length
For y = 1 To objTB.rows(x-1).cells.length
objXL.Cells(x,y).value = objTB.rows(x-1).cells(y-1).innerTEXT
Next
Next
End Function
//-->
</SCRIPT>
  • 打赏
  • 举报
回复
shuiyueer7 2005-09-14
谢谢zhoumins(zm)的方法

果然好使!!!!

不过有点纳闷

为什么我的列明明是这个样子: 51050219690120000

导成Excel后成了这个样子: 5.10502E+16

如何解决这个问题呢?
  • 打赏
  • 举报
回复
xiaowangtian1117 2005-09-14
if(grd.Items.Count!=0)
{
StringWriter tw=new StringWriter();
HtmlTextWriter hw=new HtmlTextWriter(tw);
grd.RenderControl(hw);
int intV;
string strFileName;
Random rd=new Random();
intV=rd.Next();
strFileName=DateTime.Now.Second.ToString()+DateTime.Now.Millisecond.ToString()+intV.ToString()+".xls";
string filenew=Page.MapPath("../uploading/"+strFileName);
FileStream fl=new FileStream(filenew,FileMode.CreateNew);
StreamWriter fw=new StreamWriter(fl,System.Text.Encoding.GetEncoding("GB2312"));
fw.WriteLine(tw.ToString());
fw.Close();
fl.Close();
string strScript = "<script language=javascript> window.open('../uploading/" + strFileName + "', '', 'left=50,top=50,resizable=1,scrollbars=1,width=500,height=400,menubar=1'); </script>";
Page.RegisterStartupScript("", strScript);
}
else
{
string strScript = "<script language=javascript>alert('此报表没有可下载信息!');</script>";
Page.RegisterStartupScript("", strScript);
}
  • 打赏
  • 举报
回复
web_gus 2005-09-14
http://dotnet.aspx.cc/ShowDetail.aspx?id=8A4CBF47-B888-4832-3389-ED3A3A3C8AAB
  • 打赏
  • 举报
回复
test8888888www 2005-09-14
被人抢先了!
zhoumins(zm) ( ) 信誉:100
的方法很好,我一直在用!!
  • 打赏
  • 举报
回复
shuiyueer7 2005-09-14
谢谢楼上的GG Let me try ~~~
  • 打赏
  • 举报
回复
zhoumins 2005-09-14
OutPutExcel.aspx

<%@ Page language="c#" Codebehind="OutPutExcel.aspx.cs"
AutoEventWireup="false" Inherits="eMeng.Exam.OutPutExcel" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>OutPutExcel</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
<asp:Button id="Button1" runat="server" Text="输出到Excel"></asp:Button>
</form>
</body>
</HTML>

OutPutExcel.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace eMeng.Exam
{
/// <summary>
/// OutPutExcel 的摘要说明。
/// </summary>
public class OutPutExcel : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
DataGrid1.DataSource=CreateDataSource();
DataGrid1.DataBind();
}
/// <summary>
/// 创建数据源
/// </summary>
/// <returns>DataView</returns>
ICollection CreateDataSource()
{

DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("身份证号码", typeof(string)));
dt.Columns.Add(new DataColumn("图书单价",typeof(decimal)));
dt.Columns.Add(new DataColumn("购买数量",typeof(Int32)));
dt.Columns.Add(new DataColumn("总价格",typeof(decimal)));


for (int i = 0; i < 30; i++)
{
dr = dt.NewRow();

dr[0] = "123456789123456789";
dr[1] = 100 * i /3.0;
dr[2] = i + 5;
dr[3] = (decimal)dr[1] * (Int32)dr[2];
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
/// <summary>
/// 输出到Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, System.EventArgs e)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.DataGrid1.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");
e.Item.Cells[3].Attributes.Add("style","vnd.ms-excel.numberformat:¥#,###.00");
}
}
}
}

//出处孟子E章http://dotnet.aspx.cc/
  • 打赏
  • 举报
回复
emp 2005-09-14
用vba吧
  • 打赏
  • 举报
回复
ylhyh 2005-09-14
关注
  • 打赏
  • 举报
回复
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2005-09-14 03:00
社区公告

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

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