C# 讀取 儲存 匯出 匯入 EXCEL

‧OleDB方式 讀取 EXCEL檔案取得到DtatTable中
此方法稍為修改一下也能用來讀取ACCESS
/// 

/// 讀取EXCEL並存放到DataSet中

/// 

/// 檔案路徑/// 第一行為欄位名稱/// 全部為文字/// 指定活頁簿名稱/// DataSet

private System.Data.DataSet ReadExcel(String strPath, Boolean boHDR, Boolean boIMEX, String strSheetName)

{

 #region ========================================================= 參數 & 元件宣告

 // 迴傳的DataSet

 System.Data.DataSet DS = new System.Data.DataSet();

 // 該檔中的活頁簿名稱

 System.Data.DataTable DT_SheetName = new System.Data.DataTable();

 // 取資料

 System.Data.OleDb.OleDbDataAdapter DA;

 // 連線字串

 String strConn = String.Empty;

 // SQL語法

 String strSQL = "SELECT * FROM [{0}]";

 // 判斷Excel版本並區別連線字串

 System.IO.FileInfo FI = new System.IO.FileInfo(strPath);

 #endregion ====================================================== 參數 & 元件宣告

 #region ========================================================= 判斷連線字串

 // 檔案不存在返回空DataSet

 if (!FI.Exists) return DS;

 // 判斷 Excel 版本來決定不同的連線字串

 if (FI.Extension == ".xls")

 {

  strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ={0};Extended Properties= 'Excel 8.0;HDR={1};IMEX={2};'";

 }

 else if (FI.Extension == ".xlsx")

 {

  strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ={0};Extended Properties= 'Excel 12.0;HDR={1};IMEX={2};'";

 }

 else

 {

  return DS;

 }

 // 組合連線字串參數

 strConn = String.Format(strConn,

       strPath,

       ((boHDR) ? "YES" : "NO"),

       ((boIMEX) ? "1" : "0"));

 #endregion ====================================================== 判斷連線字串

 #region ========================================================= 讀取EXCEL資料

 try

 {

  using (System.Data.OleDb.OleDbConnection CONN = new System.Data.OleDb.OleDbConnection())

  {

   CONN.ConnectionString = strConn;

   // 取得Sheet名稱

   CONN.Open();

   DT_SheetName = CONN.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);

   CONN.Close();

   // 取得單一 Sheet

   if (strSheetName != "")

   {

    DA = new System.Data.OleDb.OleDbDataAdapter(String.Format(strSQL, strSheetName + "$"), CONN);

    DA.Fill(DS, strSheetName);

   }

   // 取得全部 Sheet

   else

   {

    // 取得所有Sheet資料到DataSet中

    for (int i = 0; i < DT_SheetName.Rows.Count; i += 3)

    {

     DA = new System.Data.OleDb.OleDbDataAdapter(String.Format(strSQL, DT_SheetName.Rows[i]["TABLE_NAME"].ToString()), CONN);

     DA.Fill(DS, DT_SheetName.Rows[i]["TABLE_NAME"].ToString().Replace("'", "").Replace("$", ""));

    }

   }

  }

 }

 catch

 {

  DS = null;

 }

 #endregion ====================================================== 讀取EXCEL資料

 return DS;

}

留言

  1. 您好:

    我本身對程式沒有研究,因為研究需要,老師叫我把一千多筆excel檔案,複製每個檔案的第二行貼到一個excel哩,因為檔案實在太多,想找網路上有沒有軟體可以做,而搜尋到你的程式碼
    因此,有個無理的拜託,但真的很需要!!
    想請問你可以把你的程式碼匯出成一個exe檔案給我嗎?很抱歉這是你的智慧結晶,但是真的很希望可以得到您的幫忙,拜託了!!

    我的mail: xg2320@gmail.com

    回覆刪除
  2. 請問第一行,路徑的部分格式該怎麼放,以下是我的路徑C:/App/CharstAndroid-master(1)/CharstAndroid-master/DATA.xls,這樣套進去好像不太對private System.Data.DataSet ReadExcel(String C:/App/CharstAndroid-master(1)/CharstAndroid-master/DATA, Boolean ECG, Boolean boIMEX, String DATA),可以麻煩你幫我解答嗎

    回覆刪除

張貼留言

這個網誌中的熱門文章

delivery note和delivery order的區別和翻譯

Eclipse 3.6.1 Helios 中文化方法

牙技專業英文--技工篇