分享

VBA使用FileSystemObject将读取或写入文本文件(三) — Windows Live

 爱睡觉的猫 2011-03-27
11月14日

VBA使用FileSystemObject将读取或写入文本文件(三)

第一节:VBA使用FileSystemObject将读取或写入文本文件(一)

第二节:VBA使用FileSystemObject将读取或写入文本文件(二)

    在上两节中已经详细介绍了FileSystemObject对象的一些属性及方法。那么在这一节里,我们将举例说明如何使用VBA在Excel与文本文件中的导入导出。假设我们有如下数据表及文本文件:

SimpleTable SimpleText

    现在要实现在这两个文件中的数据按指定的格式进行导入导出。下面我们就先进行将EXCEL数据表中的内容导出到testfile.txt中,并按图中的格式显示。

    一、导出到文本文件的示例代码:

Sub Export2TxtFile()
Dim fso As Object, sFile As Object, blnExist As Boolean
Dim iRow As Integer, FileName As String
Set fso = CreateObject("Scripting.FileSystemObject") '创建FileSystemObject对象
FileName = "C:\FSOTest\testfile.txt"    '指定文本文件名
Check_FileExist:
blnExist = fso.FileExists(FileName) '判断文件是否存在
If blnExist Then
If MsgBox("指定的数据文件已存在,是否覆盖原文件?", _
vbExclamation + vbYesNo, "提示信息") = vbNo Then
'如果不覆盖原文件,则要求指定文件名
FileName = Application.InputBox("请输入文件名:")
If FileName = "False" Then FileName = Sheet1.Name & "!$A$1"
FileName = "C:\FSOTest\" & FileName & ".txt"
GoTo Check_FileExist    '再次检查文件是否存在
Else    '如果是,则先删除原文件
fso.DeleteFile (FileName)
End If
End If
Set sFile = fso.CreateTextFile(FileName)
sFile.WriteLine ("[" & Sheet1.Range("A1").Value & "]")  '写入第一行数据
sFile.WriteBlankLines (1) '写入一个空白行
For iRow = 2 To Sheet1.Range("A65536").End(xlUp).Row
'从单元格A2开始读取数据,到数据表结尾,写入到文本文件中
sFile.WriteLine (Sheet1.Cells(iRow, 1).Value _
& "|" & Sheet1.Cells(iRow, 2).Value _
& "|" & Sheet1.Cells(iRow, 3).Value _
& "|" & Sheet1.Cells(iRow, 4).Value)
Next iRow
If MsgBox("文件已导出。是否打开该文件?", vbYesNo + vbInformation) = vbYes Then
Shell ("NotePad.exe " & FileName)   '打开文本文件
End If
End Sub

    二、将文本文件导入到Excel数据表中:

Sub ImportFromTextFile()
Dim fso As Object, sFile As Object, blnExist As Boolean
Dim FileName As String, LineText As Variant, i As Integer, iCol As Integer
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")    '创建FileSystemObject对象
FileName = "C:\FSOTest\testfile.txt"     '指定文本文件名
blnExist = fso.FileExists(FileName) '判断文件是否存在,如果不存在,则退出过程
If Not blnExist Then MsgBox "文件不存在!": Exit Sub
Set sFile = fso.OpenTextFile(FileName, ForReading) '创建并打开名为sFile的TextStream对象
'读取第一行数据
Sheet2.Range("A1").Value = Replace(Replace(sFile.ReadLine, "[", ""), "]", "")
sFile.SkipLine  '跳过第二行的空行
i = 2   '设置输入单元格的起始行号
Do While Not sFile.AtEndOfStream    '如果不是文本文件的尾端,则读取数据
LineText = Split(sFile.ReadLine, "|")   '拆分读取到的数据到数组中
For iCol = LBound(LineText) To UBound(LineText) '从数组中读取数据并写入对应的单元格
Sheet2.Cells(i, iCol + 1).Value = LineText(iCol)
Next iCol
i = i + 1   '滚动到下一个单元格行
Loop
'#这里可以加入设置单元格格式的代码
sFile.Close
Set fso = Nothing
Set sFile = Nothing
End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多