2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

【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引擎,上段代碼的作用是從當(dāng)前打開的工作簿Sheet1工作表中獲取姓名、學(xué)號、身份證以及出生日期信息。其中出生日期信息通過對身份證列進行mid截取,再把得到的列通過as關(guān)鍵詞變更列名為出生日期。


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



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



        前期準(zhǔn)備完成后,我們一起來看看該段代碼如何運作的,詳見如下動態(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文件,當(dāng)連接.accdb文件的時候,提示不可識別的數(shù)據(jù)庫格式,如下圖所示:



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


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多