大家好,我們今日講解「VBA信息獲取與處理」教程中第十二個專題「VBA中剪貼板(Clipboard)的應用」的第四節「剪貼板中的數據格式(Clipboard Formats)」,這個專題是非常有用的知識點,希望大家能掌握利用。
第四節 剪貼板中的數據格式(Clipboard Formats)在前面的講解中我們已經了解到使用MSForms.DataObject可以很輕鬆地提取剪貼板中的文本數據,但DataObject目前只支持文本操作,所以它的GetFromClipboard方法只能用於讀取剪貼板內文本。而通過剪貼板API函數,我們可以使用剪貼板內全部格式的數據,同樣是文本數據我們也可以利用GetClipboardData(CF_TEXT)來獲取。那麼在剪貼板中處理以文本格式存在的內存對象外,還有哪些格式呢?我們這講就來討論一下。
1 數據格式的介紹所謂數據格式(data format)是描述數據保存在文件或記錄中的規則。可以是字符形式的文本格式,或二進位數據格式的壓縮格式。字符形式的文本格式佔用的存貯空間多但透明度高,二進位數形式的壓縮格式佔用的存貯空間少但缺少透明度。
建立數據格式是為了便於更好地儲存、分析、交換和顯示數據給用戶。我們知道,在計算機中,所有數據都是以0或1構成的位構成的,在大多數的程式語言中,數據的最小單位是字節,它由8個位構成,可以表示0-255之間256個數值,要用這256個數值表示各種各樣的信息,比如文字、圖形、音頻、視頻等,就需要給代表每種信息的一串字節規定一個固定的結構和擺放規則,否則如果只是把所有數據羅列到一起,就會帶來解析上的困難。如果這種結構和規則被普遍接受,它就會成為一種通用的數據格式。
通常每種數據格式都會包含一個簡單的易於識別的字節特徵,比如我們的磁碟中的各種文件,就有文本格式、位圖格式、超文本格式等成百上千種格式,假如我們用UltraEdit之類十六進位編輯器打開一個沒有後綴名的文件,如果發現它的前四個字節是47 49 46 38("GIF8"),它很有可能是一個gif格式圖片,假如我們對gif格式的規定有全面的了解,那不但可以100%判斷它是或不是一個有效的gif格式圖片,還能把它所代表的圖形顯示到屏幕上。對於用戶來說,對不同格式的文件可以使用相應的程序打開,對於程序來說,對不同格式的數據可以使用相應的解析方式加以解讀,從而挖掘其中攜帶的信息。
2 剪貼板中的數據格式剪貼板裡可以同時存放多種格式的數據,我們將他們統稱為剪貼板格式(Clipboard Formats)。為了區別各種格式,windows給每種剪貼板格式都分配了一個特有的長整型數字,我們稱作剪貼板格式編號(Clipboard Format Number),同時,為了便於人們記憶和使用,除了少數幾個通用的標準格式,大部分數據格式還對應一個英文名稱,叫作剪貼板格式名稱(Clipboard Format Name),這個名稱是大小寫敏感的,即CSV和Csv在剪貼板中代表兩種不同的格式,它們的剪貼板格式編號也不會相同。剪貼板格式的編號和名稱是由Windows系統分配和管理的,對於常用的格式,windows對它們的編號進行了預定義,這些格式被稱為標準格式或預定義格式(Standard/Predefined Clipboard Formats)。那麼在剪切板中都有哪些數據格式呢?我這裡列出一下常用的格式:
1) Const CF_TEXT = 1 文本格式,以chr(0)作為字符串結束標誌
2) Const CF_BITMAP = 2 Bitmap對象
3) Const CF_METAFILEPICT = 3 Metafile Picture格式
4) Const CF_SYLK = 4 微軟符號連接格式(Microsoft Symbolic Link Format)
5)Const CF_DIF = 5 Software Arts' Data Interchange Format.
6) Const CF_TIFF = 6 標籤圖像文件格式(TIFF)
7) Const CF_OEMTEXT = 7 包含OEM字符集的文本格式
8) Const CF_DIB =8 設備無關位圖(DIB)格式,前面是一個BITMAPINFO結構,後面是圖像像素位
9) Const CF_PALETTE = 9 調色板對象格式,當程序向剪貼板中放入一幅使用調色板的位圖時,它需要同時將調色板也放入剪貼板
10) Const CF_PENDATA =10 手寫筆數據
11) Const CF_RIFF =11 比標準CF_WAVE所能代表的音頻格式更加複雜的音頻格式 12) Const CF_WAVE = 12 標準音頻格式(如11kHz或22kHz脈衝編碼調製)的數據 13) Const CF_UNICODETEXT =13 Unicode文本格式
14) Const CF_ENHMETAFILE =14 增強圖元文件格式
15) Const CF_HDROP = 15 文件名列表
16) Const CF_LOCALE = 16 與剪貼板內文本相關的區域選項的ID
17)Const CF_MAX =17
如果應用程式需要向剪貼板中放入的數據不能以上述格式表示或者不能轉化為上述格式時,它可以使用註冊剪貼板格式(Registered Clipboard Formats),也就是說,它可以自行為這個數據格式定義一個名稱,然後使用RegisterClipboardFormat函數註冊這個名稱,如果註冊成功,它將得到這個新建的剪貼板格式對應的編號。
3 判斷剪貼板中的數據格式的函數IsClipboardFormatAvailable如果一個應用程式只對剪貼板內格式名稱為TEXT的數據感興趣,並且它已經獲得了TEXT剪貼板格式的編號,1,那判斷它自己是否可以使用粘貼命令的最簡單的辦法是使用IsClipboardFormatAvailable(1),然後根據返回值確定剪貼板內是否包含TEXT格式數據,這個函數定義如下:
Declare Function IsClipboardFormatAvailable Lib "user32" (ByValwFormat As Long) As Long
作用: 判斷剪貼板內是否存在指定格式的數據
參數: wFormat標準剪貼板格式或註冊剪貼板格式的編號
返回值:如果剪貼板中存在相應格式的數據,則返回一個非0值否則返回0
4 剪貼板中的所有數據格式的提取使用EnumClipBoardFormats函數獲取剪貼板內所有可用格式的編號,然後使用GetClipboardFormatName函數取得該編號對應的格式名稱。
語法及聲明:Declare Function EnumClipboardFormats Lib "user32" (ByValwFormat As Long) As Long
意義:這個函數可以列舉出當前剪貼板內所有可用的數據格式
參數:wFormat代表剪貼板內已知可用的標準剪貼板格式或註冊剪貼板格式的編號
在列舉過程最開始,向函數傳入0值,函數將返回第一個可用的剪貼板格式編號,將返回值傳給下一次函數調用,可以得到下一個可用的剪貼板格式編號。
如果調用成功,則返回wFormat之後第一個可用的剪貼板格式編號,如果調用失敗,則返回0。
這個函數需要事先使用OpenClipboard成功打開剪貼板。這個函數返回的剪貼板格式的順序與放入剪貼板數據時的順序一樣。
好了,這講就講到這裡,關於剪貼板在VBA中的操作,我們至少關注文本的內容就好,其他的內容大家可以參考必要的資料。
本節知識點回向:
① 剪貼板的數據格式有哪些?
② 如何得到剪貼板的數據格式參數?
在我的系列書籍中一直在強調「搭積木」的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:
1 代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然後去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然後修正代碼,把時間利用到高效的思考上。
2 建立自己的「積木庫」。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。
VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!
我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程:
第一套:VBA代碼解決方案是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。
第二套:VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。
第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。
第四套:VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,聽元音更易接受。這套教程還會額外提供通過32位和64位兩種OFFICE系統測試的程序文件。
第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。
第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。
上述教程的學習順序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代碼庫,供讀者使用,如需要可以WeChat: NZ9668
「眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山」。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。
「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。「路漫漫其修遠兮,吾將上下而求索」
每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:
浮雲掠過,暗語無聲,
唯有清風,驚了夢中啼鶯。
望星,疏移北鬥,
奈將往事雁同行。
阡陌人,昏燈明暗,
忍顧長亭。
多少VBA人,
暗夜中,悄聲尋夢,盼卻天明。
怎無憑!
分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。回向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,
分享成果,隨喜正能量
加微信NZ9668可獲得詳細資料信息
_____________________________
更多關聯閱讀