真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

10年積累的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有伊州免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

      ADO是一組由微軟提供的COM組件,基于面向?qū)ο笏枷氲木幊探涌凇K⒃贑OM體系結(jié)構(gòu)之上,它的所有接口都是自動(dòng)化接口,因此在C++、VisualBasic、Delphi等支持COM的開發(fā)語言中通過接口都可以訪問到ADO。ADO對象模型非常精煉,由三個(gè)主要對象Connection、Command、Recordset和幾個(gè)輔助對象組成。

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

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

     如果設(shè)置前面的TypeGuessRows=0,這樣會(huì)查詢16384行,查詢完后匹配一個(gè)最合適的數(shù)據(jù)類型,不過這個(gè)長度對于我來說已經(jīng)綽綽有余,所以有一個(gè)很好的解決方法就是將TypeGuessRows的值設(shè)為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

   (其取值范圍為十進(jìn)制閉區(qū)間0-16)

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

void SetTypeGuessRowsValue()
{
   HKEY hKEY;
   LPCTSTR dataSet="SOFTWARE\\Microsoft\\Jet\\4.0\\Engines\\Excel\\";
   //打開與路徑 dataSet 相關(guān)的hKEY,KEY_WRITE表示以寫的方式打開
   long retn = ( ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,dataSet, 0, KEY_WRITE, &hKEY) );
   if( retn != ERROR_SUCCESS )
   {
      MessageBox("錯(cuò)誤: 無法打開有關(guān)的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("錯(cuò)誤: 無法修改有關(guān)注冊表信息!");
      return;
   }
}

上述內(nèi)容就是ADO中怎么利用GetCollect()函數(shù)獲取EXCEL表格中完整數(shù)字,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享名稱:ADO中怎么利用GetCollect()函數(shù)獲取EXCEL表格中完整數(shù)字
URL鏈接:http://weahome.cn/article/pddjdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部