中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ADO中怎么利用GetCollect()函數獲取EXCEL表格中完整數字

發布時間:2021-07-29 13:45:52 來源:億速云 閱讀:135 作者:Leah 欄目:編程語言

本篇文章為大家展示了ADO中怎么利用GetCollect()函數獲取EXCEL表格中完整數字,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

      ADO是一組由微軟提供的COM組件,基于面向對象思想的編程接口。它建立在COM體系結構之上,它的所有接口都是自動化接口,因此在C++、VisualBasic、Delphi等支持COM的開發語言中通過接口都可以訪問到ADO。ADO對象模型非常精煉,由三個主要對象Connection、Command、Recordset和幾個輔助對象組成。

我們利用ADO技術的GetCollect()函數讀取excel表中的字符串中會發現如果數字行數過長(一般>255行)會出現讀取的數據不完整這種情況。這是筆者在一年前寫一個讀取excel表格數據中出現的情況。針對這個問題,筆者上網查詢了一些材料,找到了一個很好的解決方法,并且很好的解決了這個問題。

     問題的原因是這樣的,因為在使用ADO.NET讀取Excel表格時,OLEDB(Excel
2000-2003一般是是Jet 4.0,Excel 2007是ACE 12.0,即Access Connectivity Engine,ACE也可以用來訪問Excel
2000-2003)會默認掃面Sheet中的前幾行來決定數據類型,Excel并不像Access一樣,一列中的單元格的數據類型可能不一樣,用ADO.NET讀取Excel時,ole
db(JET) 會掃描sheet中前幾行,默認是8行(這個值可在注冊表中TypeGuessRows設定)來決定當前列的數據類型。這樣,就給我們提供了一個解決這個問題的方法,需要通過修改注冊表中的TypeGuessRows的值來來解決這個問題。考慮一列數據,如果前8行都是數字,那么JET掃描沒有問題。如果8行內的數據類型不一樣,JET會采用一個都適合的數據類型來匹配,通常為varchar或unicode
varchar。 現在的問題是,前8行的數據如果短小,JET匹配了varchar,只有255字符。而實際可能是其它更大的數據。 
      

     如果設置前面的TypeGuessRows=0,這樣會查詢16384行,查詢完后匹配一個最合適的數據類型,不過這個長度對于我來說已經綽綽有余,所以有一個很好的解決方法就是將TypeGuessRows的值設為0;

TypeGuessRows在注冊表中的路徑如下所示:

     Excel 2000-2003 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\

     Excel 2007 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel

   (其取值范圍為十進制閉區間0-16)

    所以我們就可以寫一個很簡單的程序來解決該問題,代碼很簡單,如下所示

void SetTypeGuessRowsValue()
{
   HKEY hKEY;
   LPCTSTR dataSet="SOFTWARE\\Microsoft\\Jet\\4.0\\Engines\\Excel\\";
   //打開與路徑 dataSet 相關的hKEY,KEY_WRITE表示以寫的方式打開
   long retn = ( ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,dataSet, 0, KEY_WRITE, &hKEY) );
   if( retn != ERROR_SUCCESS )
   {
      MessageBox("錯誤: 無法打開有關的hKEY!");
      return;
   }

   //修改TypeGuessRows值
   DWORD type = REG_DWORD;
   DWORD cbData = 2;
   BYTE  VAL = 0;

   retn =::RegSetValueEx(hKEY, "TypeGuessRows", NULL, type, &VAL, cbData);
   if( retn != ERROR_SUCCESS )
   {
      MessageBox("錯誤: 無法修改有關注冊表信息!");
      return;
   }
}

上述內容就是ADO中怎么利用GetCollect()函數獲取EXCEL表格中完整數字,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湘潭市| 新干县| 如皋市| 崇明县| 米林县| 贡山| 和田县| 罗山县| 洛川县| 兴安盟| 龙南县| 永吉县| 阿合奇县| 石景山区| 琼中| 凯里市| 江西省| 永年县| 县级市| 嘉祥县| 巴彦淖尔市| 东乡| 讷河市| 福泉市| 丰镇市| 云南省| 靖州| 江都市| 合江县| 陆良县| 杂多县| 含山县| 清远市| 修文县| 聂拉木县| 大关县| 虞城县| 辉县市| 博兴县| 宜黄县| 徐汇区|