【问题标题】:Add 'sep=' line to the csv file将 'sep=' 行添加到 csv 文件
【发布时间】:2022-01-23 00:14:37
【问题描述】:

问题是,我想从 .csv 文件中复制数据,但是 excel 会自动用逗号将其分隔成列,我需要用“;”分隔它。我可以使用 vba 代码编辑 csv 文件添加 'sep= ' 开头?

【问题讨论】:

  • 正确导入 CSV 并使用导入文本向导。请参阅Import or export text (.txt or .csv) files 中的注释。这样您就可以选择分隔符并将其更改为;
  • 这对我不起作用。无论如何,无论我使用 Open 还是 OpenText,Excel 都会用逗号分隔数据。我的想法是以某种方式将 .csv 文件转换为 .txt,然后使用文本向导或通过添加 'sep=;' 找到编辑 .csv 文件的方法在第一行

标签: excel vba csv


【解决方案1】:

如果文件具有 .csv 扩展名,Excel/VBA 将忽略分隔符选项。您必须重命名它以设置分隔符。查看我的 VBA CSV parser 项目。

【讨论】:

    【解决方案2】:

    对我有用的解决方案是使用文件系统对象来读取 csv 文件并将其复制到临时文件中,并在第一行使用“sep=”。 代码如下:

    Function readCsvF(delim as String, fPath as String) As String
        Dim sourceFile As Object, objFSO as Object, newTempFile as Object, _
        line as String, newName as String
        Set objFSO = CreateObject("scripting.FileSystemObject")
        Set sourceFile = objFSO.OpenTextFile(fPath)
        newName = objFSO.GetParentFolderName(fPath) & "\tempCSVfile.csv"
        Set newTempFile = objFSO.CreateTextFile(newName, True)
        newTempFile.Writeline("sep=" & delim)
        While Not sourceFile.AtEndOfStream
            line = sourceFile.Readline
            newTempFile.Writeline (line)
        Wend
        sourceFile.Close
        newTempFile.Close
        readCsvF = newName
    End Function
    

    所以这个函数所做的基本上是创建一个新文件,其中写入第一行sep=*'your specified delimiter'*,然后逐行复制原始 csv 文件中的数据。此函数采用两个字符串参数:delim 是您要使用的分隔符,fPath 是 csv 文件的路径, - 并返回新文件的路径,因此您可以将其作为工作簿打开并进行任何操作想要。

    希望这会对某人有所帮助,我真的很难找到解决方案,也许有更好的方法,idk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2015-12-02
      相关资源
      最近更新 更多