zoukankan      html  css  js  c++  java
  • asp.net 导出Excel方法总结

    一:这种方法是把 DataSet的DataTable里面的数据拼接成html的<table></table>形式输出。

      缺点:(1)这是一种伪Excel格式,用Excel打开的时候会提示 "格式与文件扩展名格式不一致" 每次都要手动确定打开,烦

                  (2)这样一个一个的循环,效率低

         优点:直接从浏览器输出,用户可以选择保存路径

        public string GetExportString(DataSet ds)
        {
            StringBuilder data = new StringBuilder();//因为循环很多,用 StringBuilder速度会快很多
            //data = ds.DataSetName + "\n";
    
            foreach (DataTable tb in ds.Tables)//多个表
            {
                //data += tb.TableName + "\n";
                data.Append("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
                //写出列名
                data.Append("<tr style=\"font-weight: bold; white-space: nowrap;\">");
                foreach (DataColumn column in tb.Columns)
                {
    				data.Append("<td>");
    				data.Append(column.ColumnName);
    				data.Append("</td>");
                }
                data.Append("</tr>");
    
                //写出数据
                foreach (DataRow row in tb.Rows)
                {
                    data.Append("<tr>");
                    foreach (DataColumn column in tb.Columns)
                    {
                        //if (column.ColumnName.Equals("证件编号") || column.ColumnName.Equals("报名编号"))
                        //    data.Append("<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>");
                        //else
                         data.Append("<td>");
    					 data.Append(row[column].ToString());
    					 data.Append("</td>");
                    }
                    data.Append("</tr>");
                }
                data.Append("</table>");
            }
            return data.ToString();
        }
    	
        public void ExportDsToXls(Page page, string fileName, DataSet ds)
        {
            page.Response.Clear();
            page.Response.Buffer = true;
            page.Response.Charset = "GB2312";
            //page.Response.Charset = "UTF-8";
         //如果输出中文名乱码的话,可以这样编码 文件名 HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + System.DateTime.Now.ToString("_yyMMdd_hhmm") + ".xls"); page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文 page.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 page.EnableViewState = false; page.Response.Write(GetExportString(ds)); page.Response.End(); } //style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰 //输出为Table,能够最大限度的减少字段中数据对生成的文件格式的影响,在这里我没有处理数据中含有HTML标签的情况 在页面后台中,这样使用就可以了:

     二:用到 Microsoft.Office.Interop.Excel dll,在服务器输出,输出的Excel在服务器,(如果是b/s架构的话还要想着怎么把这个导出的文件拿回来),而且如果出现异常或者中断的话,在服务器上面有很多excel的进程需要手动去关闭,要不过不了多久,服务器就挂掉了,所以这个方法比较适合用在WinForm的开发,不适合用在web的。

            public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName)
            {
    
                if (tmpDataTable == null)
    
                    return;
    
                int rowNum = tmpDataTable.Rows.Count;
    
                int columnNum = tmpDataTable.Columns.Count;
    
                int rowIndex = 1;
    
                int columnIndex = 0;
    
    
    
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
    
                xlApp.DefaultFilePath = "";
    
                xlApp.DisplayAlerts = true;
    
                xlApp.SheetsInNewWorkbook = 1;
    
                Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
    
    
    
                //将DataTable的列名导入Excel表第一行
    
                foreach (DataColumn dc in tmpDataTable.Columns)
                {
    
                    columnIndex++;
    
                    xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;
    
                }
    
    
    
                //将DataTable中的数据导入Excel中
    
                for (int i = 0; i < rowNum; i++)
                {
    
                    rowIndex++;
    
                    columnIndex = 0;
    
                    for (int j = 0; j < columnNum; j++)
                    {
    
                        columnIndex++;
    
                        xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString();
    
                    }
    
                }
    
                //xlBook.SaveCopyAs(HttpUtility.UrlDecode(strFileName, System.Text.Encoding.UTF8));
    
                xlBook.SaveCopyAs(strFileName);
    
            }
    
  • 相关阅读:
    margin问题
    IE6里面子集尺寸大的会把父亲撑大
    第一个元素<flout>写了,想在他的旁边加一个元素.IE6会出现缝隙. 不要用margin撑开,要用flout
    兼容性,float
    HTML5的兼容问题以及调用js文件的方法
    表单
    表格的编写,课程表
    SmartThreadPool
    C# 多线程的等待所有线程结束的一个问题
    DataTable保存与读取 stream
  • 原文地址:https://www.cnblogs.com/jiekk/p/2440618.html
Copyright © 2011-2022 走看看