首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA向csv文件中添加行

VBA向csv文件中添加行
EN

Stack Overflow用户
提问于 2019-03-04 01:49:07
回答 2查看 2.3K关注 0票数 0

我已经搜索了很多,但大多数结果都与excel有关。所以我找不到任何答案的线索。

Access2010女士正在尝试这样做:

我有几个csv文件,头在第一行。所有字段都是由字符串分隔的,它们都是字符串(双引号中有很多)。

我不知道每个csv文件中有多少列。我想在第一行(标题)和第二行之间插入新行。

如何知道csv文件有多少列?如何在第二行中添加新的文本行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-04 08:34:30

对于这样的任务,FileSystemObject是一个很好的工具:

代码语言:javascript
运行
复制
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:\test\timezone.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

票数 2
EN

Stack Overflow用户

发布于 2019-03-04 02:46:19

只要录个宏就可以帮你做这件事了。我这样做了,我得到了下面的代码。

代码语言:javascript
运行
复制
Sub Makro1()

Workbooks.Open Filename:="C:\Users\Excel\Desktop\Coding\R Programming\Merge Multiple CSV Files\CSV5.csv", Local:=True

Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Range("A1").Select
ActiveCell.FormulaR1C1 = "field1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "field2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "field3"
Range("A1").Select
ActiveWorkbook.Save

End Sub
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54975638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档