Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA将行添加到csv文件_Excel_Vba_Csv_Ms Access_Ms Access 2010 - Fatal编程技术网

Excel VBA将行添加到csv文件

Excel VBA将行添加到csv文件,excel,vba,csv,ms-access,ms-access-2010,Excel,Vba,Csv,Ms Access,Ms Access 2010,我搜索了很多,但大多数结果都与excel相关。所以我找不到任何关于我答案的线索 我正试图通过access2010女士来说明这一点: 我有几个csv文件,第一行有标题。所有字段都用分隔符分隔,并且都是双引号,双引号中有许多字段 我不知道每个csv文件中有多少列。 我想在第一行标题和第二行之间插入新行 我怎样才能知道csv文件有多少列? 如何在第二行添加新的文本行?只需录制一个宏即可。我做到了,我得到了下面的代码 Sub Makro1() Workbooks.Open Filename:="C:\

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

我正试图通过access2010女士来说明这一点:

我有几个csv文件,第一行有标题。所有字段都用分隔符分隔,并且都是双引号,双引号中有许多字段

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

我怎样才能知道csv文件有多少列?
如何在第二行添加新的文本行?

只需录制一个宏即可。我做到了,我得到了下面的代码

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
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:\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

您可以在Excel中打开CSV文件,添加行,然后以CSV格式将其保存回。CSV是一种文本格式。您甚至不需要在Excel中打开它,只需使用VBA文本文件处理函数或FileSystemObject即可。如果您不知道列的布局,另一种选择是使用ADODB文本驱动程序连接到它,然后通过INSERT命令添加一行。每个人都知道如何打开它并添加新行。请不要将csv文件与其他文件关联。我所能使用的就是ms access,我所拥有的只是csv文件。我想知道如何构建functioncsv文件作为参数,获取csv文件的头数,以及functioncsv文件、头数、字段数组值作为参数,添加新行阅读我上面评论中的链接答案。它准确地向您展示了如何读取标题-您只需要使用连接到它,而不是使用Excel。如上所述,添加行是一个简单的insert语句。在我的例子中,重命名会出错,因为路径包含文件名。谢谢你,你说得对。不知怎的,我最后一次的改正失败了。请参阅更正的代码。