现在的位置: 首页 > 综合 > 正文

完美解决dataset导出excel问题

2013年07月12日 ⁄ 综合 ⁄ 共 3806字 ⁄ 字号 评论关闭

遇到了一个问题:需要从dataset中导出excel,要求如下: 1.不能使用excel对象,因为服务器在远端 2.生成的样式要和excel一样,不能出现白底等现象 过程:因为前期写了一个方法,实现了不使用excel对象导出,主要是用流方式,用html文件模拟的,但是问题是导出的excel显示的时候比较难看,有黑框和白底,视觉上不美观,想到过用css处理,但是由于不能控制一个sheet中的列的个数,最终放弃。 现在需要一个完美的解决方案。

protected void CreateExcel(DataSet ds,string fileName)   
 
    {   
 
 
 
        StringBuilder strb = new StringBuilder();   
 
        strb.Append(" <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"");   
 
        strb.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");   
 
        strb.Append("xmlns=\"http://www.w3.org/TR/REC-html40\"");   
 
        strb.Append(" <head> <meta http-equiv='Content-Type' content='text/html; charset=gb2312'>");   
 
        strb.Append(" <style>");   
 
        strb.Append(".xl26");   
 
        strb.Append(" {mso-style-parent:style0;");   
 
        strb.Append(" font-family:\"Times New Roman\", serif;");   
 
        strb.Append(" mso-font-charset:0;");   
 
        strb.Append(" mso-number-format:\"@\";}");   
 
        strb.Append(" </style>");   
 
        strb.Append(" <xml>");   
 
        strb.Append(" <x:ExcelWorkbook>");   
 
        strb.Append("  <x:ExcelWorksheets>");   
 
        strb.Append("  <x:ExcelWorksheet>");   
 
        strb.Append("    <x:Name>Sheet1 </x:Name>");   
 
        strb.Append("    <x:WorksheetOptions>");   
 
        strb.Append("    <x:DefaultRowHeight>285 </x:DefaultRowHeight>");   
 
        strb.Append("    <x:Selected/>");   
 
        strb.Append("    <x:Panes>");   
 
        strb.Append("      <x:Pane>");   
 
        strb.Append("      <x:Number>3 </x:Number>");   
 
        strb.Append("      <x:ActiveCol>1 </x:ActiveCol>");   
 
        strb.Append("      </x:Pane>");   
 
        strb.Append("    </x:Panes>");   
 
        strb.Append("    <x:ProtectContents>False </x:ProtectContents>");   
 
        strb.Append("    <x:ProtectObjects>False </x:ProtectObjects>");   
 
        strb.Append("    <x:ProtectScenarios>False </x:ProtectScenarios>");   
 
        strb.Append("    </x:WorksheetOptions>");   
 
        strb.Append("  </x:ExcelWorksheet>");   
 
        strb.Append("  <x:WindowHeight>6750 </x:WindowHeight>");   
 
        strb.Append("  <x:WindowWidth>10620 </x:WindowWidth>");   
 
        strb.Append("  <x:WindowTopX>480 </x:WindowTopX>");   
 
        strb.Append("  <x:WindowTopY>75 </x:WindowTopY>");   
 
        strb.Append("  <x:ProtectStructure>False </x:ProtectStructure>");   
 
        strb.Append("  <x:ProtectWindows>False </x:ProtectWindows>");   
 
        strb.Append(" </x:ExcelWorkbook>");   
 
        strb.Append(" </xml>");   
 
        strb.Append("");   
 
        strb.Append(" </head> <body> <table align=\"center\" style='border-collapse:collapse;table-layout:fixed'> <tr>");   
 
 
 
        if (ds.Tables.Count > 0)   
 
        {   
 
            //写列标题   
 
 
 
            int columncount = ds.Tables[0].Columns.Count;   
 
            for (int columi = 0; columi < columncount; columi++)   
 
            {   
 
                strb.Append(" <td> <b>" + ds.Tables[0].Columns[columi] + " </b> </td>");   
 
            }   
 
            strb.Append(" </tr>");   
 
            //写数据   
 
 
 
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)   
 
            {   
 
                strb.Append(" <tr>");   
 
                for (int j = 0; j < ds.Tables[0].Columns.Count; j++)   
 
                {   
 
                    strb.Append(" <td class='xl26'>" + ds.Tables[0].Rows[i][j].ToString() + " </td>");   
 
                }   
 
                strb.Append(" </tr>");   
 
            }   
 
 
 
        }   
 
        strb.Append(" </body> </html>");   
 
 
 
 
 
        Response.Clear();   
 
        Response.Buffer = true;   
 
        Response.Charset = "GB2312";   
 
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);   
 
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文   
 
        Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。   
 
        this.EnableViewState = false;   
 
 
 
        Response.Write(strb);   
 
        Response.End();   
 
    }  

抱歉!评论已关闭.