VBA在写入csv文件时将数字转换为科学计数法

问题描述 投票:0回答:1

我有一个 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 文件中的数据如下所示:

Output file

因此数字 0.08348590975457270 最终成为 8.348590975457270E-2。如何避免科学记数法出现在 csv 文件中(无需调整工作表中单元格的格式)?

有人建议我尝试:

fileLine = sCat(Application.Trim(Range(ws.Cells(rLoop, 1), ws.Cells(rLoop, maxCols + 1))), ",")

但这只起到了部分作用。大多数数字不再转换为科学记数法。然而,有几个数字仍然采用科学记数法。行为相当不稳定。

vba csv scientific-notation
1个回答
0
投票

添加数字检查和格式:

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

© www.soinside.com 2019 - 2024. All rights reserved.