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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VBA中在文本文件中间插入行,你可以使用FileSystemObject对象来读取写入文件。下面是一个示例代码,演示如何在文本文件的指定行之后插入新行: ```vba Sub InsertLineInFile() Dim filePath As String Dim lineToInsert As String Dim lineToFind As String Dim tempFilePath As String Dim tempFileName As String ' 设置文件路径 filePath = "C:\path\to\your\file.txt" ' 设置要插入的行 lineToInsert = "This is the new line to insert" ' 设置要找到的行 lineToFind = "This is the line after which you want to insert the new line" ' 创建FileSystemObject对象 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") ' 检查文件是否存在 If Not fso.FileExists(filePath) Then MsgBox "文件不存在!" Exit Sub End If ' 创建一个临时文件以保存修改后的内容 tempFilePath = fso.GetParentFolderName(filePath) tempFileName = fso.GetBaseName(filePath) & "_temp" & fso.GetExtensionName(filePath) ' 打开原始文件和临时文件 Dim originalFile As Object Set originalFile = fso.OpenTextFile(filePath, 1) ' 1 表示只读模式 Dim tempFile As Object Set tempFile = fso.CreateTextFile(tempFilePath & "\" & tempFileName, True) ' True 表示创建新文件 ' 逐行读取原始文件并写入临时文件 Do Until originalFile.AtEndOfStream Dim line As String line = originalFile.ReadLine ' 找到要插入行的位置 If line = lineToFind Then ' 在找到的行之后插入新行 tempFile.WriteLine line tempFile.WriteLine lineToInsert Else ' 其他行直接写入临时文件 tempFile.WriteLine line End If Loop ' 关闭文件 originalFile.Close tempFile.Close ' 删除原始文件并重命名临时文件为原始文件名 fso.DeleteFile filePath fso.MoveFile tempFilePath & "\" & tempFileName, filePath MsgBox "新行已成功插入文件!" End Sub ``` 请确保将上述代码中的`filePath`、`lineToInsert`和`lineToFind`替换为你实际的文件路径、要插入的行和要找到的行。 此代码将在指定行之后插入新行,并将修改后的内容保存回原始文件中。请注意,在处理大型文件时,此方法可能会对性能产生一些影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值