Excel:如何仅在CSV文件中向字符串添加双引号

时间:2009-05-11 05:39:18

标签: excel vba excel-vba csv

我想从Excel创建一个CSV文件,其中字符串值应该是双引号,日期值应该是MM / dd / yyyy格式。所有数值和布尔值都应该没有引号。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

Excel不允许您指定格式,这有点可怕。这是一个可能对您有用的MrExcel链接。

http://www.mrexcel.com/forum/showthread.php?t=320531

以下是该网站的代码:

Sub CSVFile()

Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")

If FName <> False Then
  ListSep = Application.International(xlListSeparator)
  If Selection.Cells.Count > 1 Then
    Set SrcRg = Selection
  Else
    Set SrcRg = ActiveSheet.UsedRange
  End If    
  Open FName For Output As #1    
  For Each CurrRow In SrcRg.Rows
    CurrTextStr = ""
    For Each CurrCell In CurrRow.Cells
      CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
    Next
    While Right(CurrTextStr, 1) = ListSep
      CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
    Wend    
    Print #1, CurrTextStr    
  Next    
  Close #1    
  End If
End Sub

答案 1 :(得分:2)

使用VBA更容易实现此目的。 SaveAs对象的Workbook方法只允许您选择预定义的格式,xlCSV方法不会使用双引号分隔字符串。

要在VBA中执行此操作:

Dim fileOut As Integer

fileOut = FreeFile
Open "C:\foo.csv" For Output As #fileOut

Write #fileOut, 14, "Stack Overflow", Date, True

Close #fileOut

(NB Date是一个VBA语句,它将当前系统日期作为子类型的变体Date返回

如果您在记事本中检查文件:

  

14,“Stack Overflow”,#2009-05-12#,#TRUE#

字符串已根据需要分隔,日期转换为通用格式,日期和布尔值都用#符号分隔。

要使用Input #语句读取正在使用的数据,该语句将适当地解释所有值。

如果你想写一部分行,然后在以后完成写作:

Write #fileOut, 14, "Stack Overflow";
Write #fileOut, Date, True

产生与原始程序相同的结果。第一个语句末尾的分号阻止了新行的启动

带有嵌入式双引号的字符串会导致问题,因此您需要删除或替换这些字符