我有一个 Excel 工作表,其中包含如下所示的数据:
A | B | C | D | E |
---|---|---|---|---|
保罗 | 约翰逊 | 纽约 | 0 | 错误 |
坐标X | 90 | 0.08348590975457270 |
我需要将其写入 csv 文件。
.SaveAs 方法对我不起作用,因为这会为第 2 行创建 2 个尾随逗号。
因此我的方法是:
- 对于工作表中的每一行,我确定包含数据的最后一列;
- 然后我创建该行中所有单元格的字符串;
- 该字符串被写入文件。
代码的相关部分如下所示:
fileLine = sCat(Range(ws.Cells(rLoop, 1), ws.Cells(rLoop, maxCols + 1)), ",")
Print #fileNumber, fileLine
其中 sCat 是以下函数:
Function sCat(vP As Variant, delim As String) As String
' Concatenate all cells in a range, delimited by delim.
Dim v
Dim delim2 As String
For Each v In vP
sCat = sCat & delim2 & v
delim2 = delim
Next v
End Function
我的输出 csv 文件中的数据如下所示:
因此数字 0.08348590975457270 最终成为 8.348590975457270E-2。如何避免科学记数法出现在 csv 文件中(无需调整工作表中单元格的格式)?
有人建议我尝试:
fileLine = sCat(Application.Trim(Range(ws.Cells(rLoop, 1), ws.Cells(rLoop, maxCols + 1))), ",")
但这只起到了部分作用。大多数数字不再转换为科学记数法。然而,有几个数字仍然采用科学记数法。行为相当不稳定。
添加数字检查和格式:
Function sCat(vP As Variant, delim As String) As String
' Concatenate all cells in a range, delimited by delim.
Dim v
Dim delim2 As String
For Each v In vP
If IsNumeric(v) Then
v = Format(v, "0.##################################")
End If
sCat = sCat & delim2 & v
delim2 = delim
Next v
End Function