附加方式寫入檔案
當我們用 Output
模式寫入一個已經存在的檔案時,如果檔案中存在有舊的內容的話,在寫入之後就會將舊的內容覆蓋掉,若想要保留舊資料,並增加一些內容接在原本資料的後方,就可以用附加的方式(append)寫入檔案,最典型的使用情境就是將程式輸出訊息寫入記錄檔。
若要以附加方式寫入檔案,只要將開檔的模式改為 Append
即可,以下是一個簡單的範例:
Dim OutputFilePath As String Dim Content As String OutputFilePath = "C:ExcelDemodemo_output.txt" ' 建立文字檔 Open OutputFilePath For Output As #2 Content = "This is a test." Print #2, Content Close #2 ' 附加方式寫入檔案 Open OutputFilePath For Append As #3 Content = "This is another test." Print #3, Content Close #3
執行之後,demo_output.txt
的內容如下:
VBA 的開檔模式除了
Input
、Output
與 Append
之外,還有用於二進位檔案的 Binary
模式,以及用於隨機存取的 Random
模式,不過另外這兩種一般人比較少用,就不介紹了,有興趣的人請參考 MSDN 的說明。自動選擇檔案代碼
如果要使用程式自動開啟多個檔案,不想使用手動指定檔案代碼的話,可以使用 FreeFile
這個函數自動取得可用的檔案代碼,以下是一個簡單的使用範例:
Dim FileCount As Integer Dim FileNumber As Integer Dim FileName As String ' 使用迴圈自動寫入 5 個檔案 For FileCount = 1 To 5 ' 自動取得檔案代碼 FileNumber = FreeFile() ' 檔案名稱 FileName = "C:ExcelDemodemo_output_" & FileCount & ".txt" ' 開啟檔案 Open FileName For Output As #FileNumber ' 寫入檔案 Print #FileNumber, "Hello, World" ' 關閉檔案 Close #FileNumber Next FileCount
這個範例會自動寫入五個檔案,程式設計者不需要檢查可用的檔案代碼,在較複雜的程式中,建議使用這種方式,可以避免不小心造成檔案代碼衝突的問題。
應用範例
寫入 CSV 檔案
CSV 檔案就是每個欄位以逗點分隔的檔案,以下是將 Excel 表格的資料寫入 CSV 檔的範例,假設我們的 Excel 檔案中有一張向這樣的表格:
若要在 VBA 中將這個表格的資料直接寫成一個 CSV 檔,可以這樣寫:
Dim ColNum As Integer Dim Line As String Dim LineValues() As Variant Dim OutputFileNum As Integer Dim PathName As String Dim RowNum As Integer Dim SheetValues() As Variant ' 取得目前 Excel 檔的儲存路徑 PathName = Application.ActiveWorkbook.Path ' 自動取得檔案代碼 OutputFileNum = FreeFile ' 在同樣路徑下,開啟一個 demo_output.csv 檔 Open PathName & "demo_output.csv" For Output As #OutputFileNum ' 取得 Excel 表格內的資料 SheetValues = Sheets("工作表1").Range("A1:C6").Value ' 動態調整陣列大小 ReDim LineValues(1 To 3) For RowNum = 1 To 5 For ColNum = 1 To 3 ' 把 Excel 資料表的一列資料放進陣列中 LineValues(ColNum) = SheetValues(RowNum, ColNum) Next ' 將陣列中的資料以逗號連接起來 Line = Join(LineValues, ",") ' 將 CSV 資料寫入檔案 Print #OutputFileNum, Line Next ' 關閉檔案 Close #OutputFileNum
產生的 CSV 檔若用記事本開啟,即可看到其原始的資料:
而若使用 Excel 來開啟 CSV 檔,就會直接以表格的方式呈現:
更多關於 VBA 的教學文章,請參考 VBA 程式設計。
參考資料:Home & Learn、tutorialspoint、Excel Easy
繼續閱讀: 12
NewStudent
請問如果不知道 Excel 表格內的資料的範圍,要怎麼使用陣列呢?
‘ 取得 Excel 表格內的資料
SheetValues = Sheets(“工作表1”).Range(“A1:C6”).Value
‘ 動態調整陣列大小
ReDim LineValues(1 To 3)
For RowNum = 1 To 5
For ColNum = 1 To 3
‘ 把 Excel 資料表的一列資料放進陣列中
LineValues(ColNum) = SheetValues(RowNum, ColNum)
Next
‘ 將陣列中的資料以逗號連接起來
Line = Join(LineValues, “,”)
‘ 將 CSV 資料寫入檔案
Print #OutputFileNum, Line
Next
marson
你好 有個問題請教
我該如何把輸出的csv檔
改成 UTF-8的格式呢?
我嘗試用以下這個 還是失敗 XD
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/stream-object-properties-methods-and-events?redirectedfrom=MSDN&view=sql-server-ver15