您是否可以在excel中编辑csv文件,而不必更改excel的格式&引用;?

您是否可以在excel中编辑csv文件,而不必更改excel的格式&引用;?,excel,vba,csv,Excel,Vba,Csv,我有很多csv文件,我想在VBA宏(Excel 2010)中批量编辑这些文件。它们以逗号分隔,每个值的周围都有“”。这是一个示例输入: "text","9","01/01/2020" 编辑后,此格式无法更改,因为其他程序依赖于此格式。假设我在excel中打开文件,将9改为8,然后保存。excel保存的输出将删除以下内容: text,8,01/01/2020 我尝试导入excel,但不将“计数”作为文本限定符,但保存之后,结果如下所示 """text""","""8""","""01/01/2

我有很多csv文件,我想在VBA宏(Excel 2010)中批量编辑这些文件。它们以逗号分隔,每个值的周围都有“”。这是一个示例输入:

"text","9","01/01/2020"
编辑后,此格式无法更改,因为其他程序依赖于此格式。假设我在excel中打开文件,将9改为8,然后保存。excel保存的输出将删除以下内容:

text,8,01/01/2020
我尝试导入excel,但不将“计数”作为文本限定符,但保存之后,结果如下所示

"""text""","""8""","""01/01/2020"""
我曾尝试通过文本导入向导将值强制为文本,但没有帮助

那么,有没有一种方法可以在excel中编辑csv文件,同时在保存后保持单一的“格式”


到目前为止,我能想到的最好的解决方法是用记事本之类的东西打开“”输出,并对“”和“”进行查找和替换,但我发现这有点难以自动化。

请尝试下一个代码。它打开不带引号的.csv文件并用引号保存(不使用Excel另存为对话框)。在这两者之间,您可以进行任何需要的修改。csv文件使用初始全名保存,但在末尾添加“_bis”。我这样做只是为了测试。如果它将显示像在我的电脑,你可以关闭csv和保存它与您的修改和报价,也。。。 请使用记事本打开创建的csv文件

当然,在以这种方式进行测试之后,您只能使用添加引号并将数组保存为csv的部分。如果需要,我可以制作一个函数。使用类似的参数,活动工作表使用范围数组和要保存的csv的完整路径

Sub OpenTextNoQuotesSaveWithQuotes()
Dim csvFullName As String, arr As Variant, arr1 As Variant
   csvFullName = "csvFileFullPath" 'use here your csv file full path
    Workbooks.OpenText Filename:=csvFullName, Origin:= _
        437, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Comma:=True

   'do whatewer modifications needed here...
   '......................................

   'add doublequotes:
   Set sh = ActiveWorkbook.Sheets(1): arr = sh.UsedRange.Value
  ReDim arr1(UBound(arr, 1) - 1, UBound(arr, 2) - 1)
  For i = 1 To UBound(arr, 1)
     For j = 0 To UBound(arr, 2) - 1
        arr1(i - 1, j) = Chr(34) & arr(i, j + 1) & Chr(34)
     Next
  Next i

  'create .CSV comma delimited
  Dim newF As String, FileNum, strRow As String
  newF = Left(csvFullName, Len(csvFullName) - 4) & "_bis.csv"
  FileNum = FreeFile()
  Open newF For Output As #FileNum
    For i = 0 To UBound(arr1, 1)
      For j = 0 To UBound(arr1, 2)
        strRow = strRow & arr1(i, j) & "," ' arr1(i, 0) & "," & arr1(i, 1) & "," & arr1(i, 2) & _
                                        arr1(i, 3) & "," & arr1(i, 4)
      Next j
       strRow = Left(strRow, Len(strRow) - 1)
        Print #FileNum, strRow: strRow = ""
    Next i
  Close #FileNum
End Sub

普通CSV不需要引用所有值;我认为这是一个更大的问题,无论你有任何其他程序读取数据。Excel只在需要引用的地方保留引用(例如,如果字符串本身包含逗号字符),而且似乎没有任何通用的方法来更改。如果您无法更改下游程序,我会坚持使用文本编辑工具编辑CSV。VBA本身可以将文件作为文本文件打开,对其进行操作,然后重新保存,而无需调用文本导入向导。