asp.net导出数据到Excel的方法(完全无组件,不用调用Excel.exe)

今天把大家最常用的功能 asp.net 导出数据到Excel, 通常的方法 是组件形式的,但是ASP.NET 对杀死Excel.exe支持不够好,特别还需要设置dcom太麻烦了.现在我给大家的是我做 开发 ,已经应用到实际项目 的方法,该方法不用调用Excel.exe进程.有不明白的,可以在下面留言,我会做解答的.

  1. using System;  
  2. using System.Text;  
  3. using System.Data;  
  4. using System.Data.OleDb;  
  5.  
  6. namespace PowerAgent.DBUtility  
  7. {  
  8.     /** <summary>  
  9.     /// DataToExcel 的摘要说明。  
  10.  
  11.     /// DataToExcel 的摘要说明。  
  12.     /// </summary>  
  13.     public class DataToExcel  
  14.     {  
  15.         const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;";  
  16.  
  17.         public DataToExcel()  
  18.         {  
  19.         }  
  20.  
  21.         public string DataTableToExcel(DataTable dt, string excelPath)  
  22.         {  
  23.             if (dt == null)  
  24.             {  
  25.                 return "DataTable不能为空";  
  26.             }  
  27.  
  28.             int rows = dt.Rows.Count;  
  29.             int cols = dt.Columns.Count;  
  30.             StringBuilder sb;  
  31.             string connString;  
  32.  
  33.             if (rows == 0)  
  34.             {  
  35.                 return "没有数据";  
  36.             }  
  37.  
  38.             sb = new StringBuilder();  
  39.             connString = string.Format(ConnectionString, excelPath);  
  40.  
  41.             //生成创建表的脚本  
  42.             sb.Append("CREATE TABLE ");  
  43.             sb.Append(dt.TableName + " ( ");  
  44.  
  45.             for (int i = 0; i < cols; i++)  
  46.             {  
  47.                 if (i < cols - 1)  
  48.                     sb.Append(string.Format("{0} varchar,", dt.Columns.ColumnName));  
  49.                 else  
  50.                     sb.Append(string.Format("{0} varchar)", dt.Columns.ColumnName));  
  51.             }  
  52.  
  53.             using (OleDbConnection objConn = new OleDbConnection(connString))  
  54.             {  
  55.                 OleDbCommand objCmd = new OleDbCommand();  
  56.                 objCmd.Connection = objConn;  
  57.  
  58.                 objCmd.CommandText = sb.ToString();  
  59.  
  60.                 try  
  61.                 {  
  62.                     objConn.Open();  
  63.                     objCmd.ExecuteNonQuery();  
  64.                 }  
  65.                 catch (Exception e)  
  66.                 {  
  67.                     return "在Excel中创建表失败,错误信息:" + e.Message;  
  68.                 }  
  69.  
  70.                 生成插入数据脚本#region 生成插入数据脚本  
  71.                 sb.Remove(0, sb.Length);  
  72.                 sb.Append("INSERT INTO ");  
  73.                 sb.Append(dt.TableName + " ( ");  
  74.  
  75.                 for (int i = 0; i < cols; i++)  
  76.                 {  
  77.                     if (i < cols - 1)  
  78.                         sb.Append(dt.Columns.ColumnName + ",");  
  79.                     else  
  80.                         sb.Append(dt.Columns.ColumnName + ") values (");  
  81.                 }  
  82.  
  83.                 for (int i = 0; i < cols; i++)  
  84.                 {  
  85.                     if (i < cols - 1)  
  86.                         sb.Append("@" + dt.Columns.ColumnName + ",");  
  87.                     else  
  88.                         sb.Append("@" + dt.Columns.ColumnName + ")");  
  89.                 }  
  90.                 #endregion  
  91.  
  92.  
  93.                 //建立插入动作的Command  
  94.                 objCmd.CommandText = sb.ToString();  
  95.                 OleDbParameterCollection param = objCmd.Parameters;  
  96.  
  97.                 for (int i = 0; i < cols; i++)  
  98.                 {  
  99.                     param.Add(new OleDbParameter("@" + dt.Columns.ColumnName, OleDbType.VarChar));  
  100.                 }  
  101.  
  102.                 //遍历DataTable将数据插入新建的Excel文件中  
  103.                 foreach (DataRow row in dt.Rows)  
  104.                 {  
  105.                     for (int i = 0; i < param.Count; i++)  
  106.                     {  
  107.                         param.Value = row;  
  108.                     }  
  109.  
  110.                     objCmd.ExecuteNonQuery();  
  111.                 }  
  112.  
  113.                 return "数据已成功导入Excel";  
  114.             }//end using  
  115.         }  
  116.     }//end class  
  117. }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值