我想从Excel创建一个CSV文件,其中字符串值应该是双引号,日期值应该是MM / dd / yyyy格式。所有数值和布尔值都应该没有引号。
我该怎么做?
答案 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
产生与原始程序相同的结果。第一个语句末尾的分号阻止了新行的启动
带有嵌入式双引号的字符串会导致问题,因此您需要删除或替换这些字符