一个dataSet有两个表,如何把两个表导入excel的两个sheet中? asp.net要求点击导入时 输入excel文件名,excel的两个sheet名称就是datatable的表名,找了很多资料都搞不定 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 导出到 Excel 中多个工作表(Sheet) 的方法如果是DataTable,DataSet,可以直接导出成文件。下面是完整的源代码:C# 代码<%@ Page Language="C#" %><script runat="server"> protected void Page_Load(object sender, EventArgs e) { // 下面采用的是DataTable,也可以采用DataSet,其中每个DataTable可以保存成一个 Sheet // 迅雷下载时可以在下载完毕后会自动把文件名更新成 xls 或者 xml 的。 System.Data.DataTable dt = new System.Data.DataTable(); if (!Page.IsPostBack) { System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal))); dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal))); System.Random rd = new System.Random(); for (int i = 0; i < 88; i++) { dr = dt.NewRow(); dr[0] = "班级" + i.ToString(); dr[1] = "【孟子E章】" + i.ToString(); dr[2] = System.Math.Round(rd.NextDouble() * 100, 0); dr[3] = System.Math.Round(rd.NextDouble() * 100, 0); dr[4] = System.Math.Round(rd.NextDouble() * 100, 0); dr[5] = System.Math.Round(rd.NextDouble() * 100, 0); dt.Rows.Add(dr); } } //假如每10条数据放在一个 Sheet 里面,先计算需要多少个 Sheet int ItenCountPerSheet = 10; int SheetCount = Convert.ToInt32(Math.Ceiling((double)dt.Rows.Count / ItenCountPerSheet)); Response.ClearContent(); Response.BufferOutput = true; Response.Charset = "utf-8"; Response.ContentType = "application/ms-excel"; Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentEncoding = System.Text.Encoding.UTF8; //Response.AppendHeader("Content-Disposition", "attachment;filename="+Server.UrlEncode("孟宪会Excel表格测试")+".xls"); // 采用下面的格式,将兼容 Excel 2003,Excel 2007, Excel 2010。 String FileName = "孟宪会Excel表格测试"; if (!String.IsNullOrEmpty(Request.UserAgent)) { // firefox 里面文件名无需编码。 if (!(Request.UserAgent.IndexOf("Firefox") > -1 && Request.UserAgent.IndexOf("Gecko") > -1)) { FileName = Server.UrlEncode(FileName); } } Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls"); Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>"); Response.Write(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet' xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>"); Response.Write(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>"); Response.Write(@"<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor> <Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>"); Response.Write("</DocumentProperties>"); Response.Write(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/> <Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>"); //定义标题样式 Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders> <Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>"); //定义边框 Response.Write(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders> <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>"); Response.Write("</Styles>"); //SheetCount代表生成的 Sheet 数目。 for (int i = 0; i < SheetCount; i++) { //计算该 Sheet 中的数据起始行和结束行。 int start = ItenCountPerSheet * i; int end = ItenCountPerSheet * (i + 1); if (end > dt.Rows.Count) end = dt.Rows.Count; Response.Write("<Worksheet ss:Name='Sheet" + (i + 1) + "'>"); Response.Write("<Table x:FullColumns='1' x:FullRows='1'>"); //输出标题 Response.Write("\r\n<Row ss:AutoFitHeight='1'>"); for (int j = 0; j < dt.Columns.Count; j++) { Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>"); } Response.Write("\r\n</Row>"); for (int j = start; j < end; j++) { Response.Write("<Row>"); for (int c = 0; c < 6; c++) { //对于数字,采用Number数字类型 if (c > 1) { Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); } else { Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); } } Response.Write("</Row>"); } Response.Write("</Table>"); Response.Write("</Worksheet>"); Response.Flush(); } Response.Write("</Workbook>"); Response.End(); }</script> DataSet,可以直接导出成文件。下面是完整的源代码:有没有现成的,是不是让我 对照这上面改? 我有Gridview到处成excel表的实例:地址 孟大侠,有没有可以采用DataSet,其中每个DataTable可以保存成一个 Sheet 本帖最后由 net_lover 于 2012-09-21 09:01:17 编辑 使用NPOI比较简单些,先创建文档,再创建sheet,再创建行。再创建列。从网上下载个挺好用的也很容易理解 DataSet这样 Response.ClearContent(); Response.BufferOutput = true; Response.Charset = "utf-8"; Response.ContentType = "application/ms-excel"; Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentEncoding = System.Text.Encoding.UTF8; //Response.AppendHeader("Content-Disposition", "attachment;filename="+Server.UrlEncode("孟宪会Excel表格测试")+".xls"); // 采用下面的格式,将兼容 Excel 2003,Excel 2007, Excel 2010。 String FileName = "孟宪会Excel表格测试"; if (!String.IsNullOrEmpty(Request.UserAgent)) { // firefox 里面文件名无需编码。 if (!(Request.UserAgent.IndexOf("Firefox") > -1 && Request.UserAgent.IndexOf("Gecko") > -1)) { FileName = Server.UrlEncode(FileName); } } Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls"); Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>"); Response.Write(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet' xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>"); Response.Write(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>"); Response.Write(@"<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor> <Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>"); Response.Write("</DocumentProperties>"); Response.Write(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/> <Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>"); //定义标题样式 Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders> <Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>"); //定义边框 Response.Write(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders> <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>"); Response.Write("</Styles>"); //SheetCount代表生成的 Sheet 数目。 for (int i = 0; i < DataSet1.Tables.Count; i++) { DataTable dt = DataSet1.Tables[i]; Response.Write("<Worksheet ss:Name='Sheet" + (i + 1) + "'>"); Response.Write("<Table x:FullColumns='1' x:FullRows='1'>"); //输出标题 Response.Write("\r\n<Row ss:AutoFitHeight='1'>"); for (int j = 0; j < dt.Columns.Count; j++) { Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>"); } Response.Write("\r\n</Row>"); for (int j = 0; j < dt.Rows.Count; j++) { Response.Write("<Row>"); for (int c = 0; c < dt.Columns.Count; c++) { //对于数字,采用Number数字类型 if (c > 1) { Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); } else { Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); } } Response.Write("</Row>"); } Response.Write("</Table>"); Response.Write("</Worksheet>"); Response.Flush(); } Response.Write("</Workbook>"); Response.End(); 修正完整的版本System.Data.DataSet ds = new System.Data.DataSet();System.Data.DataTable dataTable1 = new System.Data.DataTable("BlogUser");System.Data.DataRow dr;dataTable1.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));dataTable1.Columns.Add(new System.Data.DataColumn("UserName", typeof(System.String)));dataTable1.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["UserId"] };for (int i = 0; i < 8; i++){ dr = dataTable1.NewRow(); dr[0] = i; dr[1] = "用户姓名【孟子E章】测试" + i.ToString(); dataTable1.Rows.Add(dr);}System.Data.DataTable dataTable2 = new System.Data.DataTable("BlogArticle");dataTable2.Columns.Add(new System.Data.DataColumn("ArticleId", typeof(System.Int32)));dataTable2.Columns.Add(new System.Data.DataColumn("Title", typeof(System.String)));dataTable2.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));dataTable2.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["ArticleId"] };Random rd = new Random();for (int i = 0; i < 20; i++){ dr = dataTable2.NewRow(); dr[0] = i; dr[1] = "文章标题例子" + i.ToString(); dr[2] = rd.Next(0, 7); dataTable2.Rows.Add(dr);}ds.Tables.Add(dataTable1);ds.Tables.Add(dataTable2);Response.ClearContent();Response.BufferOutput = true;Response.Charset = "utf-8";Response.ContentType = "application/ms-excel";Response.AddHeader("Content-Transfer-Encoding", "binary");Response.ContentEncoding = System.Text.Encoding.UTF8;String FileName = "孟宪会Excel表格测试";if (!String.IsNullOrEmpty(Request.UserAgent)){ // firefox 里面文件名无需编码。 if (!(Request.UserAgent.IndexOf("Firefox") > -1 && Request.UserAgent.IndexOf("Gecko") > -1)) { FileName = Server.UrlEncode(FileName); }}Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");Response.Write(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel'xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>");Response.Write(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>");Response.Write(@"<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor><Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>");Response.Write("</DocumentProperties>");Response.Write(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/><Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>");//定义标题样式 Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/><Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/><Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/><Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders><Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>");//定义边框Response.Write(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/><Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/><Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/><Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>");Response.Write("</Styles>");//SheetCount代表生成的 Sheet 数目。for (int i = 0; i < ds.Tables.Count; i++){ System.Data.DataTable dt = ds.Tables[i]; Response.Write("<Worksheet ss:Name='Sheet" + (i + 1) + "_" + ds.Tables[i].TableName + "'>"); Response.Write("<Table x:FullColumns='1' x:FullRows='1'>"); //输出标题 Response.Write("\r\n<Row ss:AutoFitHeight='1'>"); for (int j = 0; j < dt.Columns.Count; j++) { Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>"); } Response.Write("\r\n</Row>"); for (int j = 0; j < dt.Rows.Count; j++) { Response.Write("<Row>"); for (int c = 0; c < dt.Columns.Count; c++) { //对于数字,采用Number数字类型 if (c > 1) { Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); } else { Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); } } Response.Write("</Row>"); } Response.Write("</Table>"); Response.Write("</Worksheet>");}Response.Write("</Workbook>");Response.End();} 太狠了,就这样,相信很多朋友都会碰到这个问题,只是有一点,如果表的字段类型为int的话,就要把下面的这个去掉,不然excel打不开//对于数字,采用Number数字类型 //if (c > 1) //{ // Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); //} //else //{ Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>"); //} Windows7 IIS 7.5 ,如何进行Web Server 的设定? 利用response.redirect传值,能传多个吗? console调用webservice的时候为什么要先运行下IE网页? 关于调用样式表 WebPart是存储方法? 如何在default.aspx.cs的Application_Start中获得程序物理路径 谁能解释一下" 数据绑定"的问题?MSDN解释的太少. asp.net与asp本质的进步在哪里 又一个怪现象,请高手帮我看看 搜集asp.net 检测用在线的方法(答者有分) vb 的时间控件能不能只显示年?能不能只显示月?在线等! 点按钮就刷新页面怎么回事啊
C# 代码
<%@ Page Language="C#" %><script runat="server"> protected void Page_Load(object sender, EventArgs e)
{
// 下面采用的是DataTable,也可以采用DataSet,其中每个DataTable可以保存成一个 Sheet
// 迅雷下载时可以在下载完毕后会自动把文件名更新成 xls 或者 xml 的。
System.Data.DataTable dt = new System.Data.DataTable();
if (!Page.IsPostBack)
{
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
System.Random rd = new System.Random();
for (int i = 0; i < 88; i++)
{
dr = dt.NewRow();
dr[0] = "班级" + i.ToString();
dr[1] = "【孟子E章】" + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[3] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[4] = System.Math.Round(rd.NextDouble() * 100, 0);
dr[5] = System.Math.Round(rd.NextDouble() * 100, 0);
dt.Rows.Add(dr);
}
} //假如每10条数据放在一个 Sheet 里面,先计算需要多少个 Sheet
int ItenCountPerSheet = 10;
int SheetCount = Convert.ToInt32(Math.Ceiling((double)dt.Rows.Count / ItenCountPerSheet));
Response.ClearContent();
Response.BufferOutput = true;
Response.Charset = "utf-8";
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentEncoding = System.Text.Encoding.UTF8;
//Response.AppendHeader("Content-Disposition", "attachment;filename="+Server.UrlEncode("孟宪会Excel表格测试")+".xls");
// 采用下面的格式,将兼容 Excel 2003,Excel 2007, Excel 2010。 String FileName = "孟宪会Excel表格测试";
if (!String.IsNullOrEmpty(Request.UserAgent))
{
// firefox 里面文件名无需编码。
if (!(Request.UserAgent.IndexOf("Firefox") > -1 && Request.UserAgent.IndexOf("Gecko") > -1))
{
FileName = Server.UrlEncode(FileName);
}
}
Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");
Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");
Response.Write(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel'
xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>");
Response.Write(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>");
Response.Write(@"<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor>
<Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>");
Response.Write("</DocumentProperties>");
Response.Write(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/>
<Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>");
//定义标题样式
Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders>
<Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>"); //定义边框
Response.Write(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders>
<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>"); Response.Write("</Styles>"); //SheetCount代表生成的 Sheet 数目。
for (int i = 0; i < SheetCount; i++)
{
//计算该 Sheet 中的数据起始行和结束行。
int start = ItenCountPerSheet * i;
int end = ItenCountPerSheet * (i + 1);
if (end > dt.Rows.Count) end = dt.Rows.Count; Response.Write("<Worksheet ss:Name='Sheet" + (i + 1) + "'>");
Response.Write("<Table x:FullColumns='1' x:FullRows='1'>"); //输出标题
Response.Write("\r\n<Row ss:AutoFitHeight='1'>");
for (int j = 0; j < dt.Columns.Count; j++)
{
Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>");
}
Response.Write("\r\n</Row>");
for (int j = start; j < end; j++)
{
Response.Write("<Row>");
for (int c = 0; c < 6; c++)
{
//对于数字,采用Number数字类型
if (c > 1)
{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
}
else
{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
}
}
Response.Write("</Row>");
}
Response.Write("</Table>");
Response.Write("</Worksheet>");
Response.Flush();
}
Response.Write("</Workbook>");
Response.End();
}
</script>
孟大侠,有没有可以采用DataSet,其中每个DataTable可以保存成一个 Sheet
Response.ClearContent();
Response.BufferOutput = true;
Response.Charset = "utf-8";
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentEncoding = System.Text.Encoding.UTF8;
//Response.AppendHeader("Content-Disposition", "attachment;filename="+Server.UrlEncode("孟宪会Excel表格测试")+".xls");
// 采用下面的格式,将兼容 Excel 2003,Excel 2007, Excel 2010。 String FileName = "孟宪会Excel表格测试";
if (!String.IsNullOrEmpty(Request.UserAgent))
{
// firefox 里面文件名无需编码。
if (!(Request.UserAgent.IndexOf("Firefox") > -1 && Request.UserAgent.IndexOf("Gecko") > -1))
{
FileName = Server.UrlEncode(FileName);
}
}
Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");
Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");
Response.Write(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel'
xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>");
Response.Write(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>");
Response.Write(@"<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor>
<Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>");
Response.Write("</DocumentProperties>");
Response.Write(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/>
<Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>");
//定义标题样式
Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders>
<Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>"); //定义边框
Response.Write(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders>
<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>"); Response.Write("</Styles>"); //SheetCount代表生成的 Sheet 数目。
for (int i = 0; i < DataSet1.Tables.Count; i++)
{
DataTable dt = DataSet1.Tables[i];
Response.Write("<Worksheet ss:Name='Sheet" + (i + 1) + "'>");
Response.Write("<Table x:FullColumns='1' x:FullRows='1'>"); //输出标题
Response.Write("\r\n<Row ss:AutoFitHeight='1'>");
for (int j = 0; j < dt.Columns.Count; j++)
{
Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>");
}
Response.Write("\r\n</Row>");
for (int j = 0; j < dt.Rows.Count; j++)
{
Response.Write("<Row>");
for (int c = 0; c < dt.Columns.Count; c++)
{
//对于数字,采用Number数字类型
if (c > 1)
{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
}
else
{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
}
}
Response.Write("</Row>");
}
Response.Write("</Table>");
Response.Write("</Worksheet>");
Response.Flush();
}
Response.Write("</Workbook>");
Response.End();
System.Data.DataTable dataTable1 = new System.Data.DataTable("BlogUser");
System.Data.DataRow dr;
dataTable1.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
dataTable1.Columns.Add(new System.Data.DataColumn("UserName", typeof(System.String)));
dataTable1.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["UserId"] };
for (int i = 0; i < 8; i++)
{
dr = dataTable1.NewRow();
dr[0] = i;
dr[1] = "用户姓名【孟子E章】测试" + i.ToString();
dataTable1.Rows.Add(dr);
}
System.Data.DataTable dataTable2 = new System.Data.DataTable("BlogArticle");
dataTable2.Columns.Add(new System.Data.DataColumn("ArticleId", typeof(System.Int32)));
dataTable2.Columns.Add(new System.Data.DataColumn("Title", typeof(System.String)));
dataTable2.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
dataTable2.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["ArticleId"] };
Random rd = new Random();
for (int i = 0; i < 20; i++)
{
dr = dataTable2.NewRow();
dr[0] = i;
dr[1] = "文章标题例子" + i.ToString();
dr[2] = rd.Next(0, 7);
dataTable2.Rows.Add(dr);
}
ds.Tables.Add(dataTable1);
ds.Tables.Add(dataTable2);Response.ClearContent();
Response.BufferOutput = true;
Response.Charset = "utf-8";
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentEncoding = System.Text.Encoding.UTF8;
String FileName = "孟宪会Excel表格测试";
if (!String.IsNullOrEmpty(Request.UserAgent))
{
// firefox 里面文件名无需编码。
if (!(Request.UserAgent.IndexOf("Firefox") > -1 && Request.UserAgent.IndexOf("Gecko") > -1))
{
FileName = Server.UrlEncode(FileName);
}
}
Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");
Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");
Response.Write(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel'
xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>");
Response.Write(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>");
Response.Write(@"<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor>
<Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>");
Response.Write("</DocumentProperties>");
Response.Write(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/>
<Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>");
//定义标题样式
Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders>
<Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>");//定义边框
Response.Write(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders>
<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>");Response.Write("</Styles>");//SheetCount代表生成的 Sheet 数目。
for (int i = 0; i < ds.Tables.Count; i++)
{
System.Data.DataTable dt = ds.Tables[i];
Response.Write("<Worksheet ss:Name='Sheet" + (i + 1) + "_" + ds.Tables[i].TableName + "'>");
Response.Write("<Table x:FullColumns='1' x:FullRows='1'>"); //输出标题
Response.Write("\r\n<Row ss:AutoFitHeight='1'>");
for (int j = 0; j < dt.Columns.Count; j++)
{
Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>");
}
Response.Write("\r\n</Row>");
for (int j = 0; j < dt.Rows.Count; j++)
{
Response.Write("<Row>");
for (int c = 0; c < dt.Columns.Count; c++)
{
//对于数字,采用Number数字类型
if (c > 1)
{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
}
else
{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
}
}
Response.Write("</Row>");
}
Response.Write("</Table>");
Response.Write("</Worksheet>");
}
Response.Write("</Workbook>");
Response.End();
}
//if (c > 1)
//{
// Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
//}
//else
//{
Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + dt.Rows[j][c].ToString() + "</Data></Cell>");
//}