Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數(shù)據(jù)處理軟件。 FileSystemObject對象模型,是微軟提供的專門用來訪問計算機文件系統(tǒng)的,具有大量的屬性、方法和事件。其使用面向對象的“object.method”語法來處理文件夾和文件,使用起來十分方便(需Office 2000以后版本)。FileSystemObject并不是VBA的一部分,它是以一個COM組件的形式提供的。因此,要使用先要創(chuàng)建FileSystemObject對象。 ![]() ? FileSystemObject對象模型包含了下面的對象和集合: ·FileSystemObject 主對象,包含用來創(chuàng)建、刪除和獲得有關信息,以及用來操作驅動器、文件夾和文件的方法和屬性。 ·Drive 對象,包含用來獲得信息的方法和屬性,這些信息是關于連接在系統(tǒng)上的驅動器的,如有多少可用空間等。驅動器不一定是硬盤,也可以是CD-ROM、U盤甚至是通過網絡在邏輯上連接的硬盤(如公司里部門共享的服務器網絡硬盤)。 ·Drives 集合,提供驅動器的列表,這些驅動器以實物或在邏輯上與系統(tǒng)相連接。Drives集合包括所有驅動器,與類型無關。 ·File 對象,包含用來創(chuàng)建、刪除或移動文件的方法和屬性。 ·Files 集合,提供包含在文件夾內的所有文件的列表。 ·Folder 對象,包含用來創(chuàng)建、刪除或移動文件夾的方法和屬性。 ·Folders 集合,提供包含在文件夾內的所有文件夾的列表。 ·TextStream 對象,用來讀寫文本文件。 (一)準備工作 要使用FileSystemObject對象,先要創(chuàng)建它。創(chuàng)建FileSystemObject對象要使用CreatObject函數(shù)。CreateObject 函數(shù)用來創(chuàng)建并返回一個對 ActiveX 對象的引用。 語法:CreateObject(class,[servername]) class 是要創(chuàng)建的應用程序名稱和類。 因此,我們用下面的代碼創(chuàng)建FileSystemObject對象: Scripting是類型庫的名稱,F(xiàn)ileSystemObject就是要創(chuàng)建的對象的名字。 同樣我們可以創(chuàng)建Dictionary 對象如下: FileSystemObject對象模型中有些功能是重復的,如可用FileSystemObject對象的CpoyFile方法,也可用File對象的Copy方法來復制文件。下面先介紹FileSystemObject對象的方法。 1、GetDrive 方法 語法:object.GetDrive drivespec drivespec參數(shù)可以是一個驅動器字符(c)、一個驅動器字符加一個冒號(c:)、一個驅動器字符加冒號和路徑分隔符(c:\)或任何網絡共享的說明(file://computer2/share1)。 作用:返回一個與指定路徑中的驅動器相對應的 Drive 對象。 示例:
如果 drivespec 不符合任何一種可以接受的形式或者不存在,則發(fā)生一個錯誤。 注意:為簡潔,示例中都假定fso是已經創(chuàng)建的FileSystemObject對象 2、GetDriveName 方法 語法:object.GetDriveName(path) 作用:返回一個包含指定路徑的驅動器名字的字符串。 示例:
3、GetExtensionName 方法 語法:object.GetExtensionName(path) 作用:返回一個包含路徑中最后部件擴展名的字符串。 示例: 4、GetBaseName 方法 語法:object.GetBaseName(path) 作用:返回一個包含路徑中最后部件的基本名字(去掉任何文件擴展名)的字符串。 示例: 5、GetAbsolutePathName 方法 語法:object.GetAbsolutePathName(pathspec) 作用:從提供的路徑說明中返回一個完整、明確的路徑。 示例:
6、GetFile 方法 語法:object.GetFile(filespec) 作用:返回一個和指定路徑中文件相對應的 File 對象。 示例: 注意:如果指定的文件不存在,則發(fā)生一個錯誤。 7、GetFileName 方法 語法:object.GetFileName(pathspec) 作用:返回指定路徑中的最后部件,該路徑不是驅動器說明的一部分。 示例: 8、GetFolder 方法 語法:object.GetFolder(folderspec) 作用:返回一個和指定路徑中文件夾相對應的 Folder 對象。 示例: 注意:如果指定的文件夾不存在,則發(fā)生一個錯誤。 9、GetSpecialFolder 方法 語法:object.GetSpecialFolder(folderspec) 作用:返回指定的特殊文件夾。 說明: WindowsFolder 0 Windows 文件夾,包含由 Windows 操作系統(tǒng)安裝的文件。 10、GetParentFolderName 方法 語法:object.GetParentFolderName(path) 作用:返回一個包含指定路徑最后部件父文件夾名字的字符串。 示例: 11、GetTempName 方法 語法:object.GetTempName 作用:返回一個隨機產生的臨時文件或文件夾的名字,該名字在執(zhí)行需要臨時文件或文件夾的操作時有用。 說明:GetTempName 方法不產生一個文件,它僅提供一個臨時文件名字,該名字可被 CreateTextFile 用于創(chuàng)建一個文件。 示例: 12、BuildPath 方法 語法:object.BuildPath(path, name) 作用:追加一個名字到一個已經存在的路徑。 示例: 13、CreateFolder 方法 語法:object.CreateFolder(foldername) 作用:創(chuàng)建一個文件夾。 注意:如果指定的文件夾已經存在,則發(fā)生一個錯誤。 示例: 14、CopyFolder 方法 語法:object.CopyFolder source, destination[, overwrite] source 必需的。指明一個或多個被復制文件夾的字符串文件夾說明,可以包括通配符。 作用:復制一個文件夾到另一個地方。 說明: ① 通配符僅可用于 source 參數(shù)的最后一個路徑部件。 例如:fso.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\" 這是可以的。 ② 如果 source 包含通配符或 destination 以路徑分隔符(\)為結尾,則認為 destination 是一個已存在的文件夾,在其中復制相匹配的文件夾和子文件夾。否則認為 destination 是一個要創(chuàng)建的文件夾的名字。 例如:fso.copyfolder "c:\tmp", "f:\abc\" 如果F盤沒有abc文件夾,將發(fā)生錯誤。如果存在,可看到abc文件夾里有tmp文件夾。 ③如果 destination 是一個已存在的文件,則發(fā)生一個錯誤。 ④如果 destination 是一個目錄,它將嘗試復制文件夾和它所有的內容。如果一個包含在 source 的文件已在 destination 中存在,當 overwrite 為 False 時發(fā)生一個錯誤,否則它將嘗試覆蓋這個文件。 ⑤如果 destination 是一個只讀目錄,當嘗試去復制一個已存在的只讀文件到此目錄并且 overwrite為 False 時,則發(fā)生一個錯誤。 ⑥如果 source 不存在或使用的通配符不能和任何文件夾匹配,也發(fā)生一個錯誤。 ⑦CopyFolder 方法停止在它遇到的第一個錯誤上,之前所做的操作是不會消失的,所以要注意。 15、MoveFolder 方法 語法:object.MoveFolder source, destination 參數(shù)與CopyFolder的前兩個一樣。 作用:將一個或多個文件夾從一個地方移動到另一個地方。 說明: ①只有在操作系統(tǒng)支持的情況下,這個方法才允許文件夾在卷之間移動。Windows是不允許的,將C盤的文件夾移到D盤是不行的。 ②如果 source 包含通配符或 destination 以路徑分隔符 (\) 為結尾,則認為 destination 指定了一個已存在的文件夾,在此文件夾中移動相匹配的文件。否則,認為 destination 是一個要創(chuàng)建的目標文件夾名字。這點與CopyFolder是一樣的。 ③如果 destination 是一個已存在的文件,則發(fā)生一個錯誤。 ④如果 destination 是一個目錄,則發(fā)生一個錯誤。 ⑤如果 source 不存在或使用的通配符不能和任何文件夾匹配,也發(fā)生一個錯誤。 ⑥MoveFolder 方法停止在它遇到的第一個錯誤上。不要嘗試回卷在錯誤發(fā)生前所做的任何改變。 16、DeleteFolder 方法 語法:object.DeleteFolder folderspec[, force] folderspec 必需的。要刪除的文件夾的名字。 Folderspec 可以在最后的路徑部件中包含通配符。 作用:刪除一個指定的文件夾和它的內容。 說明:如果沒有發(fā)現(xiàn)相匹配的文件夾,則發(fā)生一個錯誤。DeleteFolder 方法停止在它遇到的第一個錯誤上,不要嘗試回卷或撤消錯誤發(fā)生前所做的任何改變。 示例: 17、FolderExists 方法 語法:object.FolderExists(folderspec) 作用:如果指定的文件夾存在返回 True,不存在返回 False。 18、DriveExists 方法 語法:object.DriveExists(drivespec) 作用:如果指定的驅動器存在,返回 True,如果不存在返回 False。 19、FileExists 方法 語法:object.FileExists(filespec) 作用:如果指定的文件存在,返回 True,若不存在,則返回 False。 20、CreateTextFile 方法 語法:object.CreateTextFile(filename[, overwrite[, unicode]]) overwrite 可選的。Boolean 值,表示一個已存在文件是否可被覆蓋。如果可被覆蓋其值為 True, 作用:創(chuàng)建一個指定的文件名并且返回一個用于該文件讀寫的 TextStream 對象。 示例: 21、OpenTextFile 方法 語法:object.OpenTextFile(filename[, iomode[, create[, format]]]) 作用:打開一個指定的文件并返回一個 TextStream 對象,該對象可用于對文件進行讀、寫、追加操作。 說明: ForReading 1 打開一個只讀文件,不能對此文件進行寫操作。 注意:在VBA幫助里是沒有ForWriting的,其實是有的,VBA幫助也是有錯誤的。另外,這些常數(shù)在使用前要先聲明,或者直接用數(shù)值。 ·create 可選的,它表示如果指定的 filename 不存在是否可以創(chuàng)建一個新文件。如果創(chuàng)建新文件,其值為 True。若不創(chuàng)建文件其值為 False。缺省值為 False。 ·Format 參數(shù)可為下面設置值中的任何值: TristateUseDefault –2 使用系統(tǒng)缺省打開文件。 示例: 或者: 這兩者功能是一樣的,一個聲明了常量,一個直接用數(shù)值。都是在C盤創(chuàng)建文件testfile.txt(如不存在),或以寫的方式打開(如存在)。 22、CopyFile 方法 語法:object.CopyFile source, destination[, overwrite] 作用:把一個或多個文件從一個地方復制到另一個地方。 說明:需要注意的地方與CopyFolder是完全類似的。 示例: 23、MoveFile 方法 語法:object.MoveFile source, destination 作用:將一個或多個文件從一個地方移動到另一個地方。 說明:需要注意的地方與MoveFolder是完全類似的。 24、DeleteFile 方法 語法:object.DeleteFile filespec[, force] 作用:刪除一個指定的文件。 說明:force 可選的。如果要刪除具有只讀屬性設置的文件,其值為 True。如果其值為 False (缺省),則不能刪除具有只讀屬性設置的文件。 (三)處理驅動器 可以利用Drive對象來獲取有關各種驅動器的信息,Drive對象的屬性有: TotalSize 屬性 驅動器的總容量,以字節(jié)為單位。 這些屬性的使用都十分簡單,直接用“對象.屬性”就可以了。在使用前要先用GetDrive獲得一個Drive對象,注意不能創(chuàng)建一個驅動器對象。下面舉個例子:
利用Call ShowFreeSpace("c:"),即可獲得C盤的卷標名和可用空間。 (四)處理文件夾 1、獲取文件夾的信息 可以利用Folder對象來獲取有關文件夾的信息,F(xiàn)older對象的屬性有: Attributes 屬性 文件夾的屬性。可為下列值中的任意一個或任意的邏輯組合: 屬性的使用和Drive對象是一樣的,可以用GetFolder獲取一個Folder對象,也可以用FileSystemObject對象的CreateFolder 方法創(chuàng)建一個Folder對象。 2、Folder對象的方法 ⑴Copy 方法 語法:object.Copy destination[, overwrite] 作用:把一個指定的文件夾從一個地方復制到另一個地方。 說明:Copy 方法的作用與FileSystemObject對象的CopyFolder 方法是一樣的,不同在于后者可一次復制多個文件夾。 ⑵Move 方法 語法:object.Move destination 作用:將一個指定的文件夾從一個地方移動到另一個地方。 說明:Move 方法的作用與FileSystemObject.MoveFolder 是一樣的。不同在于后者可一次移動多個文件夾。 ⑶Delete 方法 語法:object.Delete force 作用:刪除一個指定的文件夾。 說明:Delete 方法的作用與FileSystemObject.DeleteFolder 是一樣的。 ⑷CreateTextFile 方法 語法:object.CreateTextFile(filename[, overwrite[, unicode]]) 作用:與FileSystemObject對象的CreateTextFile 方法是一樣的。 示例: 可在C盤tmp文件夾下創(chuàng)建testfile.txt文件。 (五)處理文件 1、獲取文件的信息 可以利用File對象來獲取有關文件的信息,F(xiàn)ile對象的屬性和Folder的屬性是完全一樣的,只是少了Files 屬性、IsRootFolder 屬性、SubFolders 屬性這3個屬性。這里就不列了。 2、File對象的方法 ⑴Copy 方法 ⑵Move 方法 ⑶Delete 方法 以上三種方法與Folder的是完全類似的,語法也一樣,同樣也可用FileSystemObject對象相應的方法代替。 ⑷OpenAsTextStream 方法 語法:object.OpenAsTextStream([iomode, [format]]) 作用:打開一個指定的文件并返回一個 TextStream 對象,該對象可用來對文件進行讀、寫、追加操作。 說明:此方法與FileSystemObject對象的 OpenTextFile 方法相同的功能。參數(shù)也是一致的。 (六)處理文本文件 1、打開或創(chuàng)建文本文件 打開現(xiàn)有的文本文件,可以使用FileSystemObject對象的 OpenTextFile 方法或File對象的OpenAsTextStream 方法。 創(chuàng)建文件可以使用FileSystemObject對象的 CreatTextFile 方法或在OpenTextFile 方法中將iomode參數(shù)設為ForWriting=2,create參數(shù)設為True。 2、讀取文件 打開文件后,將返回一個TextStream 對象,我們可以利用TextStream 對象的屬性及方法來對文件進行讀寫操作。 先看TextStream 對象的幾個屬性。 ·AtEndOfLine 屬性 文件指針是否正好在行尾標記的前面 利用TextStream 對象讀取文件有三種方法。 ·Read 方法 語法:object.Read(characters) 功能:從一個 TextStream 文件中讀取指定數(shù)量的字符并返回得到的字符串。 示例: ·ReadLine 方法 語法:object.ReadLine 功能:從一個 TextStream 文件讀取一整行(到換行符但不包括換行符)并返回得到的字符串。 示例:
·ReadAll 方法 語法:object.ReadAll 功能:讀取整個的 TextStream 文件并返回得到的字符串。 說明:對于大的文件,使用ReadAll方法浪費內存資源。應使用其它的技術去輸入一個文件,比如按行讀取文件。 示例:
還有兩個輔助讀取的方法: ·Skip 方法 語法:object.Skip(characters) 功能:當讀一個 TextStream 文件時跳過指定數(shù)量的字符。 示例:
·SkipLine 方法 語法:object.SkipLine 功能:當讀一個 TextStream 文件時跳過下一行。 3、寫入數(shù)據(jù)到文件 寫入數(shù)據(jù)到文件也有三種方法。 ·Write 方法 語法:object.Write(string) 功能:寫一個指定的字符串到一個 TextStream 文件。 示例:
·WriteLine 方法 語法:object.WriteLine([string]) 功能:寫入一個指定的字符串和換行符到一個 TextStream 文件中。 示例:
·WriteBlankLines 方法 語法:object.WriteBlankLines(lines) 功能:寫入指定數(shù)量的換行符到一個 TextStream 文件中。 示例:
4、關閉文件 利用TextStream 對象的Close方法,上面的示例中已經有了,很簡單。 (七)總結 從上面的介紹,我們看到使用FileSystemObject對象處理文件、文件夾比使用VBA語句的方法具有更容易存在的特點。這是因為FileSystemObject對象使用了面向對象的語法。另外FileSystemObject對象處理文本文件毫不遜色于VBA語句,非常值得推薦。唯一的問題是不能處理二進制文件,微軟在有關文檔中稱計劃將來支持二進制文件,不過應該只是計劃而已,呵呵。 Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。 |
溫馨提示:喜歡本站的話,請收藏一下本站!