tft每日頭條

 > 科技

 > vba獲取文件内容

vba獲取文件内容

科技 更新时间:2025-02-04 01:06:41

vba獲取文件内容?一、處理文本文件: 1、Open 語句,我來為大家科普一下關于vba獲取文件内容?以下内容希望對你有幫助!

vba獲取文件内容(VBA讀寫文件)1

vba獲取文件内容

VBA讀寫文本文件、二進制文件的一些語句和函數。

一、處理文本文件:

1、Open 語句

語法:Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

其中access、lock、reclength為可選參數,一般不用。

mode 指定打開文件的方式。有5種:

Input:以輸 入方式打開,即讀取方式。

Output:以輸出方式打開,即寫入方式。

Append:以追加方式打開,即添加内容到文件末尾。

Binary: 以二進制方式打開。

Random:以随機方式打開,如果未指定方式,則以 Random 方式打開文件。

filenumber 是一個有效的文件号,範圍在 1 到 511 之間。可以指定,也可使用 FreeFile 函數可得到下一個可用的文件号。

說明:如果 pathname 指定的文件不存在,那麼,在用 Append、Binary、Output、或 Random 方式打開文件時,可以建立這一文件。

示例:

Open "F:/TEST.txt" For Input As #1 '以輸入方式打開

Open "F:/TEST.xls" For Binary As #1 '以二進制方式打開

2、Close 語句

語法:Close [filenumberlist]

filenumberlist 參數為一個或多個文件号,若省略 filenumberlist,則将關閉 Open 語句打開的所有活動文件。

說明:打開文件後,必須在使用完後關閉文件。

示例:

Dim I, FileName

For I = 1 To 3

FileName = "TEST" & I ' 創建文件名。

Open FileName For Output As #I ' 打開文件。

Print #I, "This is a test." ' 将字符串寫入文件。

Next I

Close ' 将三個已打開的文件全部關閉。

3、Reset 語句

語法:Reset

功能:關閉所有用 Open 語句打開的磁盤文件。

說明:Reset 語句關閉 Open 語句打開的所有活動文件,并将文件緩沖區的所有内容寫入磁盤。

示例:

Dim FileNumber

For FileNumber = 1 To 5

Open "TEST" & FileNumber For Output As #FileNumber

Write #FileNumber, "Hello World" ' 将數據寫入文件。

Next FileNumber

Reset ' 關閉文件并将緩沖區内的數據寫到磁盤中。

4、FreeFile 函數

語法:FreeFile[(rangenumber)]

參數 rangenumber指定一個範圍,以便返回該範圍之内的下一個可用文件号。指定 0(缺省值)則返回一個介于 1 – 255 之間的文件号。指定 1 則返回一個介于 256 – 511 之間的文件号。

功能:提供一個尚未使用的文件号。

示例:

Dim fnum As Integer

fnum = FreeFile

Open "F:/TEST.txt" For Input As #fnum

Close #fnum

5、EOF 函數

語法:EOF(filenumber)

功能:返回一個 Integer,它包含 Boolean 值 True,表明已經到達為 Random 或順序 Input 打開的文件的結尾。

6、LOF 函數

語法:LOF(filenumber)

功能:返回一個 Long,表示用 Open 語句打開的文件的大小,該大小以字節為單位。

7、Loc 函數

語法:LOc(filenumber)

功能:返回一個 Long,在已打開的文件中指定當前讀/寫位置。

8、Input # 語句

語法:Input #filenumber, varlist

功能:從已打開的順序文件中讀出數據并将數據指定給變量。

說明:通常用 Write # 将 Input # 語句讀出的數據寫入文件。為了能夠用 Input # 語句将文件的數據正确讀入到變量中,在将數據寫入文件時,要使用 Write # 語句而不使用 Print # 語句。使用 Write # 語句可以确保将各個單獨的數據域正确分隔開。

示例:

本示例使用 Input # 語句将文件内的數據讀入兩個變量中。本示例假設 TESTFILE文件内含數行以 Write # 語句寫入的數據;也就是說,每一行數據中的字符串部分都是用雙引号括起來,而與數字用逗号隔開,例如,("Hello", 234)。

Dim MyString, MyNumber

Open "TESTFILE" For Input As #1 ' 打開輸入文件。

Do While Not EOF(1) ' 循環至文件尾。

Input #1, MyString, MyNumber ' 将數據讀入兩個變量。

Debug.Print MyString, MyNumber ' 在立即窗口中顯示數據。

Loop

Close #1 ' 關閉文件。

9、Write # 語句

語法:Write #filenumber, [outputlist]

功能:将數據寫入順序文件。

說明:通常用 Input # 從文件讀出 Write # 寫入的數據。

如果省略 outputlist,并在 filenumber 之後加上一個逗号,則會将一個空白行打印到文件中。多個表達式之間可用空白、分号或逗号隔開。空白和分号等效。

用 Write # 将數據寫入文件時将遵循幾個通用的約定,使得無論什麼區域都可用 Input # 讀出并正确解釋數據:

在寫入數值數據時總使用句号作為十進制分隔符。

對于 Boolean 類型的數據,或者打印 #TRUE# 或者打印 #FALSE#。無論在什麼地區,都不将 True 和 False 這兩個關鍵字翻譯出來。

使用通用的日期格式将 Date 類型的數據寫入文件中。當日期或時間的部件丢失或為零時,隻将現有部分寫入文件中。

如果 outputlist 的數據為 Empty,則不将任何數據寫入文件。但對 Null 數據,則要寫入 #NULL#。

如果 outputlist 數據為 Null 數據,則将 #NULL# 寫入文件中。

對于 Error 類型的數據,輸出看起來與 #ERROR errorcode# 一樣。無論在什麼地區,都不将關鍵字 Error 翻譯出來。

與 Print # 語句不同,當要将數據寫入文件時,Write # 語句會在項目和用來标記字符串的引号之間插入逗号。沒有必要在列表中鍵入明确的分界符。Write # 語句在将 outputlist 中的最後一個字符寫入文件後會插入一個新行字符,即回車換行符,(Chr(13) Chr(10))。

示例:

Open "F:/test.txt" For Output As #1 ' 打開輸出文件。

Write #1, "Hello World", 1234 ' 寫入以逗号隔開的數據。

Write #1, ' 寫入空白行。

Dim MyBool, MyDate, MyNull, MyError

' 賦值 Boolean、Date、Null 及 Error 等。

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' Boolean 數據以 #TRUE# 或 #FALSE# 的格式寫入。

' 日期以通用日期格式寫入,例如:#1994-07-13# 代表

' 1994 年 1 月 13 日。Null 數據以 #NULL# 格式寫入。

' Error 數據以 #ERROR 錯誤代号# 的格式寫入。

Write #1, MyBool; " is a Boolean value"

Write #1, MyDate; " is a date"

Write #1, MyNull; " is a null value"

Write #1, MyError; " is an error value"

Close #1 ' 關閉文件。

我們可以看到寫入的内容為:

"Hello World",1234

#FALSE#," is a Boolean value"

#1969-02-12#," is a date"

#NULL#," is a null value"

#ERROR 32767#," is an error value"

10、Line Input # 語句

語法:Line Input #filenumber, varname

功能:從已打開的順序文件中讀出一行并将它分配給 String 變量。

說明:通常用 Print # 與 Line Input # 語句配合使用。

Line Input # 語句一次隻從文件中讀出一個字符,直到遇到回車符 (Chr(13)) 或回車–換行符 (Chr(13) Chr(10)) 為止。回車–換行符将被跳過,而不會被附加到字符串上。

示例:

Dim TextLine

Open "TESTFILE" For Input As #1 ' 打開文件。

Do While Not EOF(1) ' 循環至文件尾。

Line Input #1, TextLine ' 讀入一行數據并将其賦予某變量。

Debug.Print TextLine ' 在立即窗口中顯示數據。

Loop

Close #1 ' 關閉文件。

11、Input 函數

語法:Input(number, [#]filenumber)

其中number 指定要返回的字符個數。

功能:返回 String,它包含以 Input 或 Binary 方式打開的文件中的字符。

說明:通常用 Print # 或 Put 将 Input 函數讀出的數據寫入文件。Input 函數隻用于以 Input 或 Binary 方式打開的文件。

與 Input # 語句不同,Input 函數返回它所讀出的所有字符,包括逗号、回車符、空白列、換行符、引号和前導空格等。

示例:

Dim MyChar

Open "f:/test.txt" For Input As #1

Do While Not EOF(1) ' 循環至文件尾。

MyChar = Input(1, #1) ' 讀入一個字符。

Debug.Print MyChar ' 顯示到立即窗口。

Loop

Close #1

下面這個函數可以将文本文件的數據一次讀入到一個字符串(但是若包含中文時會出錯,因為一個中文字占2個字節)。

Public Function ReadText(FileName As String)

Dim fnum%, isopen As Boolean

On Error GoTo erro

fnum = FreeFile()

Open FileName For Input As #fnum

isopen = True

ReadText = Input(LOF(fnum), fnum)

erro:

If isopen Then Close #fnum

If err Then Debug.Print err.Number, err.Description

End Function

12、Print # 語句

語法:Print #filenumber, [outputlist]

outputlist 參數的設置如下:

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

Spc(n) 用來在輸出數據中插入空白字符,而 n 指的是要插入的空白字符數。

Tab(n) 用來将插入點定位在某一絕對列号上,這裡,n 是列号。使用無參數的 Tab 将插入點定位在下一個打印區的起始位置。

expression 要打印的數值表達式或字符串表達式。

charpos 指定下一個字符的插入點。使用分号将插入點定位在上一個顯示字符之後。用 Tab(n) 将插入點定位在某一絕對的列号上,用無參數的 Tab 将插入點定位在下一個打印區的起始處。如果省略 charpos,則在下一行打印下一個字符。

功能:将格式化顯示的數據寫入順序文件中。

說明:通常用 Line Input # 或 Input 讀出 Print # 在文件中寫入的數據。

示例:

Open "F:/test.txt" For Output As #1 ' 打開輸出文件。

Print #1, "This is a test" ' 将文本數據寫入文件。

Print #1, ' 将空白行寫入文件。

Print #1, "Zone 1"; Tab; "Zone 2" ' 數據寫入兩個區(print zones)。

Print #1, "Hello"; " "; "World" ' 以空格隔開兩個字符串。

Print #1, Spc(5); "5 leading spaces " ' 在字符串之前寫入五個空格。

Print #1, Tab(10); "Hello" ' 将數據寫在第十列。

' 賦值 Boolean、Date、Null 及 Error 等。

Dim MyBool, MyDate, MyNull, MyError

MyBool = False: MyDate = #2/12/1969#: MyNull = Null

MyError = CVErr(32767)

True、False、Null 及 Error 會根據系統的地區設置自動轉換格式。

日期将以标準的短式日期的格式顯示。

Print #1, MyBool; " is a Boolean value"

Print #1, MyDate; " is a date"

Print #1, MyNull; " is a null value"

Print #1, MyError; " is an error value"

Close #1

以上代碼寫入的内容如下:

This is a test

Zone 1 Zone 2

Hello World

5 leading spaces

Hello

False is a Boolean value

1969-2-12 is a date

Null is a null value

Error 32767 is an error value

13、Width # 語句

語法:Width #filenumber, width

width 必要。範圍在 0–255 之間的數值表達式,在新的一行開始之前,指出在該行上可出現多少字符。如果 width 等于 0,則行的長度不受限制。width 的缺省值為 0。

功能:将一個輸出行的寬度指定給用 Open 語句打開的文件。

示例:

Dim I

Open "f:/TESTFILE.txt" For Output As #1

Width #1, 5 ' 設置輸出行寬為 5。

For I = 0 To 9 ' 循環 10 次。

Print #1, Chr(48 I); ' 每行輸出五個字符。

Next I

Close #1

以上代碼寫入的内容如下:

01234

56789

二、處理二進制文件:

打開二進制文件可以使用Open語句的Random和Binary方式打開。二進制文件讀寫使用Get和Put語句。

1、Put 語句

語法:Put [#]filenumber, [recnumber], varname

recnumber 可選。Variant (Long)。記錄号(Random 方式的文件)或字節數(Binary 方式的文件),指明在此處開始寫入。

說明:通常用 Get 将 Put 寫入的文件數據讀出來。

示例:

Dim num As Long, text As String

num = 12345

text = "a string"

Open "f:/data.bin" For Binary As #1 '打開或創建一個二進制文件

Put #1, , num '寫入4個字節

Put #1, , text '寫入8個字節(字符串長為8)

Close #1

2、Get 語句

語法:Get [#]filenumber, [recnumber], varname

recnumber 可選。Variant (Long)。記錄号(Random 方式的文件)或字節數(Binary 方式的文件),以表示在此處開始讀出數據。

功能:将一個已打開的磁盤文件讀入一個變量之中。

說明:通常用 Put 将 Get 讀出的數據寫入一個文件。

示例:讀取以上代碼寫入的内容

Dim num As Long, text As String

Open "f:/data.bin" For Binary As #1

Get #1, , num

text = Space$(8) '準備8個字節的字符串

Get #1, , text '讀入

Debug.Print num, text

Close #1

在立即窗口可以看到如下内容:

12345 a string

3、Seek 語句

語法:Seek [#]filenumber, position

其中position 為介于 1~ 2,147,483,647(相當于 2^31 – 1)之間的數字,指出下一個讀寫操作将要發生的位置。

功能:在 Open 語句打開的文件中,設置下一個讀/寫操作的位置。

說明:可以用Seek語句指定Get語句的讀取位置,但在 Get 及 Put 語句中指定的記錄号将覆蓋由 Seek 語句指定的文件位置。

示例:

Dim MaxSize, NextChar, MyChar

Open "TESTFILE" For Input As #1

MaxSize = LOF(1) ' 取得文件的總字符數。

' 用循環讀入所有記錄,但是從最後的記錄開始往前讀。

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar ' 設置讀寫位置。

MyChar = Input(1, #1) ' 讀入一字符。

Next NextChar

Close #1

4、Seek 函數

語法:Seek(filenumber)

功能:返回一個 Long,在 Open 語句打開的文件中指定當前的讀/寫位置。

說明:在使用Get語句讀取文件時,必須用LOF函數來判斷是否到達文件末尾,而不是用EOF函數。可以使用Seek函數判斷當前位置,然後與 LOF的值比較。

示例:

Do While Seek(1) < LOF(1)

'繼續讀取

......

Loop

三、例子:

Dim filepath As String

Dim filenumber As Integer

Dim contents As String

Dim comStr As String

Dim count As Integer

Dim start As Integer

Dim i As Integer

Dim name As String

filenumber = FreeFile()

filepath = "c:/scripts/insert.txt"

count = InputBox("請輸入記錄的條數")

start = InputBox("請輸入記錄開始單元格的行數")

contents = ""

comStr = "insert into tml (id,name) values ("

For i = 1 To count Step 1

name = Worksheets(1).Cells(start, 1).Value

contents = contents & i & ",'" & name & "'" & Chr(10)

start = start 1

Next i

Open filepath For Output As #filenumber

Print #filenumber, contents

Close #filenumber

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved