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

hlswsv35  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(187)

我有一个Excel工作表,其中包含如下所示的数据:
| 一|B| C| D| E|
| --|--|--|--|--|
| 保罗|Json|纽约| 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文件中的数据如下所示:
x1c 0d1x的数据
因此,数字0.08348590975457270最终会变成8.348590975457270E-2。如何避免在csv文件中出现科学记数法(而不必更改工作表中单元格的格式)?
有人劝我试一试:

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


但这只是部分的效果,大部分的数字都没有被转换成科学记数法,但有几个数字仍然是科学记数法,这是相当不稳定的行为。

z9ju0rcb

z9ju0rcb1#

添加数字检查和格式设置:

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
            If v <> Int(v) Then
                'check for non-integer numbers only
                v = Format(v, "0.0#################################")
            End If
        End If
        sCat = sCat & delim2 & v
        delim2 = delim
    Next v
End Function

字符串
Format(v, "0.##################################")强制使用完整的数字集。

相关问题