【问题标题】:How to save semi-colon delimited csv file using VBA?如何使用 VBA 保存分号分隔的 csv 文件?
【发布时间】:2012-11-09 21:45:06
【问题描述】:

我将数据复制到电子表格中,使用 VBA 对其进行格式化,然后将该表格保存到 CSV 文件中。

我使用以下代码:

ws.SaveAs Filename:=filestr, Fileformat:=xlCSV

ws 是我保存的工作表。

这给了我一个逗号分隔的 CSV 文件。

我想将该工作表保存到以分号分隔的文件中。

我发现了以下内容:

  1. 转到开始>设置>区域和语言选项
  2. 点击自定义按钮
  3. 在列表分隔符旁边键入分号 (;)

我按照上面的步骤将代码更改为:

ws.SaveAs Filename:=filestr, Fileformat:=xlCSV, Local:=True

我仍然得到一个逗号分隔的 CSV 文件作为输出。

我使用的是 Excel 2003,我的操作系统是 Windows XP。

【问题讨论】:

  • 这是一种手动操作的方法; stackoverflow.com/a/7079703/246342 将分隔符替换为“;”和 ActiveSheet.UsedRange 的范围
  • 非常感谢您的建议。但是当我尝试运行您的代码时遇到了问题。我的电子表格中有一些值,例如1.0000000,当它被CStr(c.Value) 转换为字符串时,它会自动四舍五入为1。你能建议如何处理它吗?谢谢:)
  • 为了保持格式,将CStr(c.Value)替换为c.text
  • 非常感谢您的帮助:)

标签: excel vba


【解决方案1】:

我刚刚检查过这个,因为有同样的问题。在这种情况下,文件名没有任何功能。

这对我有用:

With ActiveWorkbook
    .SaveAs Filename:="My File.csv", FileFormat:=xlCSV, Local:=True
    .Close False
End With

在区域设置中 -> ; 关闭时您必须使用 False

【讨论】:

  • 就像一个魅力......但有必要设置“.Close False”!谢谢
  • 我正在使用 Excel 2007,并且只有在调用“.Close False”之后,我的 CSV 才使用“;”保存作为列表分隔符。谢谢!
【解决方案2】:

无需声明所有这些变量,只需在 SaveAs 方法的末尾添加 local:=true,如下所示:

ActiveWorkbook.SaveAs Filename:="C:/Path/TryMe.csv", FileFormat:=xlCSV, Local:=True

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,在考虑尝试使用 VBA 代码和内核调用更改区域设置中的“行分隔符”后,我认为这会更痛苦,所以我只是找到了一些使用Scripting.FileSystemObject 来满足我的需求。

    以下代码将采用现有的 csv 文件并将所有逗号替换为波浪号“~”字符。

    Private Sub commaReplace()
    
        Dim objFSO
        Dim filePath
        Dim migratorFileName
        Dim strFullPath1
        Dim strFullPath2
        Const ForReading = 1
        'define a TextStream object
        Dim objTS
        Dim strContents As String
    
        'note, my code actually uses the below commented out filepath
        'as the location of the workbook can be arbitrary, e.g.
        'Worksheets("FilePath").[A2:A2].Value is determined when workbook
        'is opened
        'filePath = Worksheets("FilePath").[A2:A2].Value
        filePath = "C:\Temp\"
    
        'our original file that we've exported as csv file in another section of code
        migratorFileName = "MigratorInput.csv"
        strFullPath1 = filePath + migratorFileName
    
        'the path and file name we want to save to, tilde separated vs. comma
        migratorFileName = "MigratorInput.tilde.csv"
        strFullPath2 = filePath + migratorFileName
    
        'read everything from the csv file, replacing comma with tilde
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objTS = objFSO.OpenTextFile(strFullPath1, ForReading)
        strContents = objTS.ReadAll
        strContents = Replace(strContents, ",", "~")
        objTS.Close
    
        'write everything out to another file, note, this could just overwrite
        'the original file if you pass the optional overwrite flag
        Set objTS = objFSO.CreateTextFile(strFullPath2)
        objTS.Write strContents
        objTS.Close
    
    End Sub
    

    然后您可以从创建 csv 文件的子例程中调用 commaReplace 子例程。

    希望它对某人有所帮助!

    【讨论】:

    • 数据中的逗号会发生什么变化?
    【解决方案4】:

    在构建成功后使用vbs脚本:

    .SaveAs 文件名, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1

    其中参数是:

    Object Filename,
    Object FileFormat,
    Object Password,
    Object WriteResPassword,
    Object ReadOnlyRecommended,
    Object CreateBackup,
    XlSaveAsAccessMode AccessMode,
    Object ConflictResolution,
    Object AddToMru,
    Object TextCodepage,
    Object TextVisualLayout,
    Object Local
    

    来源链接:https://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.workbook.saveas.aspx

    “SaveAs”函数中的最后一个“1”等于 Local=True

    此外,分号必须定义为操作系统区域设置中的列表分隔符(请参阅上面的答案)

    【讨论】:

      【解决方案5】:

      使用 xlCSV 的 xlSCVMSDOS 插入

      ActiveWorkbook.SaveAs Filename:="my File.csv", FileFormat:= xlCSVMSDOS, Local:=True
      

      它对我有用

      【讨论】:

      • 在我看来,这对上述答案没有任何价值。
      【解决方案6】:

      只需使用以下代码: ActiveWorkbook.SaveAs "My File.csv", xlCSV, Local:=True

      (不要使用:文件名:=)

      【讨论】:

      • 使用“文件名:=”不会改变任何东西
      猜你喜欢
      • 2017-02-14
      • 2018-10-05
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2014-06-03
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多