当前位置: 代码迷 >> ASP.NET >> 求个能导出Excel2007的通用类解决办法
  详细解决方案

求个能导出Excel2007的通用类解决办法

热度:7781   发布时间:2013-02-25 00:00:00.0
求个能导出Excel2007的通用类
网上找了一堆 都是只支持2003的, 导出的Excel我在用Excel2007 打开的时候总是提示与指定的扩展名 不一致,Excel也能打开。
有没能支持07的 这个 通用 方法 ,类似只需要传 Datetable,表头,表头字段 进去. 直接能通过respose输出的
100求.


------解决方案--------------------------------------------------------
其实,存储成xml格式的就可以了,你可以直接拷贝下面的代码执行下看
C# code
<%@ Page Language="C#" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">  protected void Page_Load(object sender, EventArgs e)  {    if (!Page.IsPostBack)    {      System.Data.DataTable dt = new System.Data.DataTable();      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);      }      GridView1.DataSource = dt;      GridView1.DataBind();    }  }  protected void Button1_Click(object sender, EventArgs e)  {    //假如每10条数据放在一个 Sheet 里面,先计算需要多少个 Sheet    int ItenCountPerSheet = 10;    int SheetCount = Convert.ToInt32(Math.Ceiling((double)GridView1.Rows.Count / ItenCountPerSheet));    String ExportFileName = "孟宪会Excel表格测试";    if (Request.Browser.Browser.IndexOf("MSIE") > -1)    {      ExportFileName = Server.UrlEncode(ExportFileName);    }    Response.ClearContent();    Response.BufferOutput = true;    Response.Charset = "utf-8";    Response.ContentType = "text/xml";    Response.ContentEncoding = System.Text.Encoding.UTF8;    //Response.AppendHeader("Content-Disposition", "attachment;filename=" + ExportFileName + ".xlsx");    // 采用下面的格式,将兼容 Excel 2003,Excel 2007, Excel 2010。    Response.AppendHeader("Content-Disposition", "attachment;filename="+Server.UrlEncode("孟宪会Excel表格测试")+".xml");    Response.Write("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");    Response.Write(@"\r\n<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(@"\r\n<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>");    Response.Write(@"\r\n<Author>孟宪会</Author><LastAuthor>孟子E章</LastAuthor>          <Created>2010-09-08T14:07:11Z</Created><Company>mxh</Company><Version>1990</Version>");    Response.Write("\r\n</DocumentProperties>");    Response.Write(@"\r\n<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>");    for (int i = 0; i < SheetCount; i++)    {      //计算该 Sheet 中的数据起始行和结束行。      int start = ItenCountPerSheet * i;      int end = ItenCountPerSheet * (i + 1);      if (end > GridView1.Rows.Count) end = GridView1.Rows.Count;          Response.Write("\r\n<Worksheet ss:Name='Sheet" + (i+1) + "'>");      Response.Write("\r\n<Table x:FullColumns='1' x:FullRows='1'>");      //输出标题      Response.Write("\r\n<Row ss:AutoFitHeight='1'>");        for (int j = 0; j < GridView1.HeaderRow.Cells.Count; j++)        {          Response.Write("<Cell ss:StyleID='Header'><Data ss:Type='String'>" + GridView1.HeaderRow.Cells[j].Text + "</Data></Cell>");        }          Response.Write("\r\n</Row>");       for (int j = start; j < end; j++)        {          Response.Write("\r\n<Row>");          for (int c = 0; c < GridView1.HeaderRow.Cells.Count; c++)          {            //对于数字,采用Number数字类型            if (c > 1)            {              Response.Write("<Cell ss:StyleID='border'><Data ss:Type='Number'>" + GridView1.Rows[j].Cells[c].Text + "</Data></Cell>");            }            else            {              Response.Write("<Cell ss:StyleID='border'><Data ss:Type='String'>" + GridView1.Rows[j].Cells[c].Text + "</Data></Cell>");            }          }            Response.Write("\r\n</Row>");        }      Response.Write("\r\n</Table>");      Response.Write("\r\n</Worksheet>");      Response.Flush();    }    Response.Write("\r\n</Workbook>");    Response.End();  }</script><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server">  <title></title></head><body>  <form id="form1" runat="server">  <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="导出测试" />  <asp:GridView ID="GridView1" runat="server">  </asp:GridView>  </form></body></html>
  相关解决方案