c# 獲取Excel內容的分析


 現在主流的Excel文檔有2003和2007

c#獲取 Excel2003 連接字符串  

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +
filepath + ";" + "Extended Properties=Excel 8.0;";  //filepath為Excel文件的路徑

Excel2003 連接方式只可以操作Excel2003的文檔

c# 獲取Excel2007 連接字符串 

string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filepath + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"; 

Excel2007 連接方式可以操作Excel2007、Excel2003的文檔

使用Excel2007 連接有時候需要先從微軟的官網下載Excel2007的驅動,下載地址如下:

http://www.microsoft.com/zh-cn/download/details.aspx?id=13255

連接字符解析

 HDR

   NO 無字段,即從Excel取得的表格中不包含列標題

          如果您在連接字符串中指定 HDR=NO,Jet OLE DB 提供程序將自動為您命名字段(F1 表示第一個字段,F2 表示第二個字段,依此類推);

   yes  有字段,默認excel表中第1行為列標題

 IMEX=1  通知驅動程序以文本格式讀取混合型的列(如數字、日期、字符串等)。需要注意的是,這個選項可能會導致Excel文件的寫入拒絕

    IMEX有三個可選的值:0,1和2,默認是0; 微軟是這樣解釋的:
        0 is Export mode    -------導出模式(從Excel文件讀取數據時使用)
        1 is Import mode     -------導入模式(向Excel文件插入數據時使用)
        2 is Linked mode (full update capabilities)  -----
Linked模式(需要完全更新Excel文件時使用)

 Excel8.0指Excel的驅動版本,從Excel97到2003都用這個,Excel2007中開始用Excel12.0

   public static System.Data.DataSet ExcelSql(string filepath, string tablename)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +
    filepath + ";" + "Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);

            conn.Open();

            //返回Excel的架構,包括各個sheet表的名稱,類型,創建時間和修改時間等    
            DataTable dtSheetName = conn.GetOleDbSchemaTable(
            OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });

            //包含excel中表名的字符串數組  
            string[] strTableNames = new string[dtSheetName.Rows.Count];
            for (int k = 0; k < dtSheetName.Rows.Count; k++)
            {
                strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
            }
          
            DataTable dt = new DataTable();
            DataSet ds = new DataSet();
            //從指定的表明查詢數據,可先把所有表明列出來供用戶選擇  
            OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + strTableNames[0].ToString() + "]", conn); //("select * from [Sheet1$]", conn);
            odda.Fill(ds, "[" + tablename + "$]");
            conn.Close();
            return ds;
            
        }
c# 獲取Excel2003內容
   /// <summary>
        /// 連接Excel  讀取Excel數據   並返回DataSet數據集合
        /// </summary>
        /// <param name="filepath">Excel服務器路徑</param>
        /// <param name="tableName">Excel表名稱</param>
        /// <returns></returns>
        public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName)
        {
            string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filepath + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"; //此連接可以操作.xls與.xlsx文件
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataSet ds = new DataSet();
            //返回Excel的架構,包括各個sheet表的名稱,類型,創建時間和修改時間等    
            DataTable dtSheetName = conn.GetOleDbSchemaTable(
            OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });

            //包含excel中表名的字符串數組  
            string[] strTableNames = new string[dtSheetName.Rows.Count];
            for (int k = 0; k < dtSheetName.Rows.Count; k++)
            {
                strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
            }  
            OleDbDataAdapter odda = new OleDbDataAdapter("select * from ["+strTableNames[0].ToString()+"]", conn); //("select * from [Sheet1$]", conn);
            odda.Fill(ds, "[" + tableName + "$]");
            conn.Close();
            return ds;
        }
c# 獲取Excel2007內容

c#操作Excel:

http://www.cnblogs.com/SunYu/archive/2010/04/27/1722471.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM