Oledb的方式導出Excel

工作中經常會遇到導出Excel,Asp.net導出Excel可以用Response.writ()方法,將dataset或datagrid中的數據輸出成excel,或者使用Excel.Application對象生成Excel文件,這個兩種方法都可以得到想要輸出的數據,但是都有弊端,前一種輸出方式得到的Excel文件並不是真正的Excel文件,當把它作爲導入Excel源文件再次導入時,就會拋出異常,提示“不是預期的數據格式”,這樣就不便於用戶的使用,而後一種可以得到標準的Excel文件,但是在Web平臺中,在多用戶大數據量操作時,很佔用系統資源,影響運行效率,對於這樣的業務需求,可以考慮使用Oledb的方式導出Excel,通過連接Excel數據源,使用Insert語句,將數據插入到Excel中。

//連接字符串

 string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Excel文件路徑及文件全名;Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";

//定義連接對象

OleDbConnection objConn = new OleDbConnection(connString)

//打開連接

objConn.Open();

//循環讀取DataTable中數據,逐行插入到Excel文件中

 for (int row = 0; row < dt.Rows.Count; row++)
{
     StringBuilder sb = new StringBuilder();

     string sql = "";

     //拼接Insert語句

     sql = " insert into [sheet1$]( ";

     for (int col = 0; col < dt.Columns.Count; col++)
      {
          if (col < dt.Columns.Count- 1)
               sql += dt.Columns[col].ColumnName + ",";
          else
               sql += dt.Columns[col].ColumnName + ") values (";
     }

     sb.Append(sql);
     for (int col = 0; col < dt.Columns.Count; col++)
     {
          if (col < dt.Columns.Count- 1)
               sb.Append("'" + dt.Rows[row][col].ToString() + "',");
          else
                sb.Append("'" + dt.Rows[row][col].ToString() + "')");
     }

     objCmd.CommandText = sb.ToString();

     objCmd.ExecuteNonQuery();//執行insert語句
}

oledb鏈接字符串中IMEX有三種模式:

當 IMEX=0 時爲“匯出模式”,這個模式開啓的 Excel 檔案只能用來做“寫入”用途。

當 IMEX=1 時爲“匯入模式”,這個模式開啓的 Excel 檔案只能用來做“讀取”用途。

當 IMEX=2 時爲“連結模式”,這個模式開啓的 Excel 檔案可同時支持“讀取”與“寫入”用途。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章