首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net 导出excel出现有关问题了

2013-06-19 
asp.net 导出excel出现问题了代码:/// summary/// 导出Excel/// /summary/// param nameds数据集

asp.net 导出excel出现问题了
代码:
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="ds">数据集</param>
        /// <param name="FileName">表名</param>
        public void CreateExcel(DataSet ds, string FileName)
        {

            HttpResponse resp;
            resp = System.Web.HttpContext.Current.Response;
            resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
            string colHeaders = "", ls_item = "";

            DataTable dt = ds.Tables[0];
            DataRow[] myRow = dt.Select();
            int i = 0;
            int c1 = dt.Columns.Count;

            for (i = 0; i < c1; i++)
            {
                if (i == (c1 - 1))
                {
                    colHeaders += dt.Columns[i].Caption.ToString() + "\n";//换单元格
                }
                else
                {
                    colHeaders += dt.Columns[i].Caption.ToString() + "\t";
                }
            }
            resp.Write(colHeaders);

            foreach (DataRow row in myRow)
            {
                for (i = 0; i < c1; i++)
                {
                    if (i == (c1 - 1))
                    {


                        ls_item += row[i].ToString() + "\n";
                    }
                    else
                    {
                        ls_item += row[i].ToString() + "\t";
                    }
                }
                resp.Write(ls_item);
                ls_item = "";
            }
            resp.End();
        }



效果:

为什么多条记录跑到一个单元格力了


这个row[i].ToString() + "\n";地方改如何改呀
[解决办法]
使用NPOI呢???
[解决办法]
excelhelper.cs,你懂的,可以看看。
[解决办法]
发个导出类


 /// <summary>
    /// DataTable通过流导出Excel
    /// </summary>
    /// <param name="ds">数据源DataSet或者DataTable</param>
    /// <param name="columns">DataTable中列对应的列名(可以是中文),若为null则取DataTable中的字段名</param>
    /// <param name="fileName">保存文件名(例如:a.xls)</param>
    /// <returns></returns>
    public bool StreamExport(DataTable dt, ArrayList columns, string fileName, System.Web.UI.Page pages)
    {
        if (dt.Rows.Count > 65535) //总行数大于Excel的行数 
        {
            throw new Exception("预导出的数据总行数大于excel的行数");
        }
        if (string.IsNullOrEmpty(fileName)) return false;

        StringBuilder content = new StringBuilder();
        StringBuilder strtitle = new StringBuilder();
        content.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>");


        content.Append("<head><title></title><meta http-equiv='Content-Type' content="text/html; charset=gb2312">");
        //注意:[if gte mso 9]到[endif]之间的代码,用于显示Excel的网格线,若不想显示Excel的网格线,可以去掉此代码
        content.Append("<!--[if gte mso 9]>");
        content.Append("<xml>");
        content.Append(" <x:ExcelWorkbook>");
        content.Append("  <x:ExcelWorksheets>");
        content.Append("   <x:ExcelWorksheet>");
        content.Append("    <x:Name>Sheet1</x:Name>");
        content.Append("    <x:WorksheetOptions>");
        content.Append("      <x:Print>");
        content.Append("       <x:ValidPrinterInfo />");
        content.Append("      </x:Print>");
        content.Append("    </x:WorksheetOptions>");
        content.Append("   </x:ExcelWorksheet>");
        content.Append("  </x:ExcelWorksheets>");
        content.Append("</x:ExcelWorkbook>");
        content.Append("</xml>");
        content.Append("<![endif]-->");
        content.Append("</head><body><table style='border-collapse:collapse;table-layout:fixed;'><tr>");

        if (columns != null)
        {
            for (int i = 0; i < columns.Count; i++)
            {
                if (columns[i] != null && columns[i] != "")
                {
                    content.Append("<td><b>" + columns[i] + "</b></td>");
                }
                else
                {
                    content.Append("<td><b>" + dt.Columns[i].ColumnName + "</b></td>");
                }
            }
        }
        else


        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                content.Append("<td><b>" + dt.Columns[j].ColumnName + "</b></td>");
            }
        }
        content.Append("</tr>\n");

        for (int j = 0; j < dt.Rows.Count; j++)
        {
            content.Append("<tr>");
            for (int k = 0; k < dt.Columns.Count; k++)
            {
                object obj = dt.Rows[j][k];
                Type type = obj.GetType();
                if (type.Name == "Int32" 
[解决办法]
 type.Name == "Single" 
[解决办法]
 type.Name == "Double" 
[解决办法]
 type.Name == "Decimal")
                {
                    double d = obj == DBNull.Value ? 0.0d : Convert.ToDouble(obj);
                    if (type.Name == "Int32" 
[解决办法]
 (d - Math.Truncate(d) == 0))
                        content.AppendFormat("<td style='vnd.ms-excel.numberformat:#,##0'>{0}</td>", obj);
                    else
                        content.AppendFormat("<td style='vnd.ms-excel.numberformat:#,##0.00'>{0}</td>", obj);
                }
                else
                    content.AppendFormat("<td style='vnd.ms-excel.numberformat:@'>{0}</td>", obj);
            }
            content.Append("</tr>\n");


        }
        content.Append("</table></body></html>");
        content.Replace("&nbsp;", "");
        pages.Response.Clear();
        pages.Response.Buffer = true;
        pages.Response.ContentType = "application/ms-excel";  //"application/ms-excel";
        pages.Response.Charset = "UTF-8";
        pages.Response.ContentEncoding = System.Text.Encoding.UTF7;
        fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
        pages.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
        pages.Response.Write(content.ToString());
        //pages.Response.End();  //注意,若使用此代码结束响应可能会出现“由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。”的异常。
        HttpContext.Current.ApplicationInstance.CompleteRequest(); //用此行代码代替上一行代码,则不会出现上面所说的异常。
        return true;
    }

热点排行