且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

VBA向CSV文件添加行

更新时间:2023-12-04 09:12:40

FileSystemObject是执行以下任务的优秀工具:

Public Function InsertLine()

    Const TmpExtension      As String = ".tmp"
    Const BakExtension      As String = ".bak"

    Dim FileSystemObject    As Scripting.FileSystemObject
    Dim SourceStream        As Scripting.TextStream
    Dim TargetStream        As Scripting.TextStream

    Dim Fields              As Variant
    Dim Values              As Variant
    Dim FieldCount          As Long
    Dim Item                As Long
    Dim Field               As String
    Dim FileName            As String
    Dim BaseName            As String
    Dim TempFileName        As String
    Dim Path                As String
    Dim Extension           As String
    Dim DotExtension        As String
    Dim TextLine            As String

    Set FileSystemObject = New Scripting.FileSystemObject

    ' File to modify.
    FileName = "c:	est	imezone.csv"

    BaseName = FileSystemObject.GetBaseName(FileName)
    Extension = FileSystemObject.GetExtensionName(FileName)
    Path = FileSystemObject.GetParentFolderName(FileName)
    DotExtension = "." & Extension
    TempFileName = BaseName & TmpExtension

    Set SourceStream = FileSystemObject.OpenTextFile(FileName, ForReading)
    Set TargetStream = FileSystemObject.CreateTextFile(TempFileName, ForWriting)

    ' Read header line.
    TextLine = SourceStream.ReadLine
    ' Copy header line.
    TargetStream.WriteLine TextLine

    ' Create line two.
    Fields = Split(TextLine, ",")
    ' FYI.
    FieldCount = UBound(Fields)
    ' Array to hold values.
    Values = Fields
    For Item = LBound(Fields) To UBound(Fields)
        Select Case Item
            Case 0
                Field = "SomeValue"
            Case 1
                Field = "OtherValue"
            Case 2
                Field = "YetAValue"
            ' etc.
            Case Else
                Field = CStr(Item)
        End Select
        Values(Item) = Chr(34) & Field & Chr(34)
    Next
    ' Write line two.
    TargetStream.WriteLine Join(Values, ",")

    ' Copy remaining lines.
    While Not SourceStream.AtEndOfStream
        TargetStream.WriteLine SourceStream.ReadLine
    Wend
    ' Close files.
    SourceStream.Close
    TargetStream.Close

    ' Rename files.
    FileSystemObject.MoveFile FileName, FileSystemObject.BuildPath(Path, BaseName & BakExtension)
    FileSystemObject.MoveFile TempFileName, FileSystemObject.BuildPath(Path, BaseName & DotExtension)

End Function

需要将引用设置为:Microsoft.Scripting.Runtime