乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【VBA技巧】- 從Excel文件或Access數(shù)據(jù)庫中獲取指定列數(shù)據(jù)

       L羅樂 2017-05-24


              最近部門有一個海外客戶,需要我們提供英文的結(jié)算單,由于國內(nèi)的柜臺系統(tǒng)只有提供中文版的結(jié)算單,所以只能通過柜臺導(dǎo)出所需要的基礎(chǔ)數(shù)據(jù),然后轉(zhuǎn)換為英文版的結(jié)算單。因為基礎(chǔ)數(shù)據(jù)是csv結(jié)尾的文件,所以我就想能夠通過把csv文件導(dǎo)入到ExcelAccess中(也可以導(dǎo)入到SQL Server數(shù)據(jù)庫中),然后再獲取相應(yīng)的列數(shù)據(jù),對其進行中英文轉(zhuǎn)換

              具體轉(zhuǎn)換細節(jié)就不做介紹了,今天主要為大家介紹如何從Excel文件或Access數(shù)據(jù)庫中獲取指定列數(shù)據(jù)。其實微軟提供2種引擎可供在不打開Excel和Access的情況下獲取數(shù)據(jù)。分別是Microsoft.Jet.OLEDB.4.0(以下簡稱 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下簡稱 ACE 引擎)。

              在測試過程中,我發(fā)現(xiàn)以上兩個引擎都可以用來訪問Excel擴展名為*.xlsm文件。但Jet引擎只能用于訪問擴展名為.mdb的Access文件,ACE引擎既可以訪擴展名為.mdb的Access文件,也可以訪問擴展名為.accdb的Access文件。

              為了更加直觀的演示,我制作了一個虛擬數(shù)據(jù),數(shù)據(jù)內(nèi)容如下圖所示:



              通過上圖可以看出,Sheet1工作表中有5列11行數(shù)據(jù),如果制作的報表中只需要其中的姓名、學(xué)號、身份證以及出生日期。那該如何操作呢?其中姓名、學(xué)號和身份證3列可以直接從上圖中獲取,出生日期列需要經(jīng)過截取而來。

              從Excel中獲取數(shù)據(jù),可以通過以下代碼實現(xiàn),代碼如下:


      ''連接Excel

      Sub test1()

          Dim conn As New Connection

          Set rs = CreateObject(''adodb.recordset'')

          

          ''conn.ConnectionString = ''Provider=Microsoft.ACE.OLEDB.12.0;Data Source='' & ThisWorkbook.Path & ''\'' & ThisWorkbook.Name & '';Extended Properties=''Excel 12.0 Xml;HDR=YES''''

          conn.ConnectionString = ''provider=microsoft.jet.oledb.4.0; extended properties=''excel 8.0;hdr=yes;imex=2'';data source='' & ThisWorkbook.FullName

          conn.Open

          Sql = ''select 姓名, 學(xué)號, 身份證, mid(身份證,7,8) as 出生日期 from [Sheet1$]''

          

          ''填寫新表的列名稱

          rs.Open Sql, conn, 1, 3

          For i = 0 To rs.Fields.Count - 1

              Worksheets(''Sheet2'').Cells(1, i 1) = rs.Fields(i).Name

          Next

          ''把查詢的結(jié)果集放入到A2單元格區(qū)域

          Worksheets(''Sheet2'').Range(''A1'').Offset(1, 0).CopyFromRecordset conn.Execute(Sql)

          

          rs.Close

          conn.Close

          Set rs = Nothing

          Set conn = Nothing

      End Sub


              核心的代碼就是使用Jet和ACE引擎,上段代碼的作用是從當前打開的工作簿Sheet1工作表中獲取姓名、學(xué)號、身份證以及出生日期信息。其中出生日期信息通過對身份證列進行mid截取,再把得到的列通過as關(guān)鍵詞變更列名為出生日期。


              上面的代碼放入模塊后,按下F5或點擊綠色圖標會提示如下錯誤(如果正常運行請忽略,第一次使用會出現(xiàn)):



              出現(xiàn)上圖的錯誤是由于Excel VBE中未引用相應(yīng)的Library,可以通過【工具】→【引用】,勾選類似【Microsoft ActiveX Data Objects *.*】并點擊確定。我這里是Microsoft ActiveX Data Objects 6.1,根據(jù)各位小伙伴安裝的Office版本的不同,版本號也會不同。



              前期準備完成后,我們一起來看看該段代碼如何運作的,詳見如下動態(tài)圖



              其實對于conn.ConnectionString也可以使用ACE引擎,把Jet引擎注釋掉即可,可以獲得同樣的效果。


              為了充分演示Jet和ACE引擎,我特地建立了2個Access文件,除了文件格式不一樣外,里面的數(shù)據(jù)都是一樣的,如下圖所示:



              為了演示Jet和ACE引擎的區(qū)別,如下動態(tài)圖分別使用ACE和Jet引擎來連接.accdb和.mdb文件,效果如下:



              通過對比,可以發(fā)現(xiàn)使用ACE引擎可以連接.accdb和.mdb文件,但Jet引擎只能連接.mdb文件,當連接.accdb文件的時候,提示不可識別的數(shù)據(jù)庫格式,如下圖所示:



              通過上面的介紹,已經(jīng)能夠從導(dǎo)出的數(shù)據(jù)中有條件的篩選出所需要的列數(shù)據(jù),然后需要做的就是對其進行中文翻譯英文即可。


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多