搜尋此網誌

2011年8月14日 星期日

excel 轉 datatable


 public DataTable ExcleToDt(String filePath)
{
   //filePath 檔案路徑
   //sheetName 預設工作表名稱
   string sheetName="Sheet1";
    int i;
    StreamWriter StreamWriterObj;
    OleDbConnection objConn ;
    DataTable dt;
    DataTable dt2=new DataTable() ;
    ArrayList ary=new ArrayList() ;
    try
    {
        DataSet myDataset=new DataSet(); 
        string strConn;
            
        //xls
         //strConn = "Provider='Microsoft.Jet.OLEDB.4.0';" + "Data Source='" + filePath + "';Extended 
         //Properties='Excel 8.0;IMEX=1;HDR=NO;'";
         //HDR=NO 表轉入後第一行為欄位名稱 主要是判斷該EXCEL欄位有無缺少
        //可讀xlsx
        strConn = "Provider='Microsoft.Ace.OleDb.12.0';" + "Data Source='" + filePath + "';Extended Properties='Excel      
       12.0;IMEX=1;HDR=NO;'";
       //使用可讀xlsx前需先下載安裝Microsoft Access Database Engine 2010 可轉散發套件
       //http://www.microsoft.com/downloads/zh-tw/details.aspx?familyid=C06B8369-60DD-4B64-A44B-  
      //84B371EDE16D&displaylang=zh-tw


         objConn = new OleDbConnection(strConn);
         objConn.Open();
         dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
         if (dt.Rows.Count >1)
        {
             foreach (DataRow row in dt.Rows)
             {
                  if (row["TABLE_NAME"].ToString().IndexOf("$") !=  -1 )
                 {
                     if (row["TABLE_NAME"].ToString().IndexOf("交付表格") != -1 || 
                     row["TABLE_NAME"].ToString().IndexOf("sheet1") != -1)
                     {
                          ary.Add(row["TABLE_NAME"]);
                      }
                  }
             }
             }
       sheetName = ary[0].ToString() ;
       OleDbDataAdapter myData =new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", 
       strConn); 
       myData.TableMappings.Add("Table", "ExcelTest");
       myData.Fill(myDataset);
       for (int ii  = 0 ;ii<= myDataset.Tables[0].Columns.Count - 1;ii++)
       {
             if (myDataset.Tables[0].Rows[0][ii].ToString() == string.Empty)
            {
                 break  ;
             }
             if (myDataset.Tables[0].Rows[0][ii].ToString()  == "EXCEL上的中文名稱1" )
            {
                 myDataset.Tables[0].Columns[ii].ColumnName = "AAA";
             }
            else if (myDataset.Tables[0].Rows[0][ii].ToString() == "EXCEL上的中文名稱1")
            {
                 myDataset.Tables[0].Columns[ii].ColumnName = "BBB";
             }
       }
       dt2 = myDataset.Tables[0];
       objConn.Close();
          
   }
   catch
   {
    }
    return dt2;
   }    

沒有留言:

張貼留言