如何在Excel中将字符串转换为数字,以及如何将数字转换为字符串

4
我有一些XML文件,其中包含以“.”作为小数分隔符存储的十进制数。我创建了一个Excel工作簿,用于编辑XML中的数据。使用MSXML从XML读取数据,然后在工作表中显示这些数据。一旦数据被存储,我就使用从表中读取的新值修改DOM结构并保存XML。
问题在于,当我将十进制数转换回字符串以将它们保存为XML中的值时,会使用用户在Windows区域设置中指定的小数分隔符。
我需要一种方法,在所有情况下强制使用“.”作为十进制分隔符来存储十进制数。这可能吗?
3个回答

7
如何通过编程的方式修改DOM结构中的新值?如何实现?
你是否可以使用“Format(Cell.value, "#0.0")”?也可以尝试“Format(CDbl(Cell.Value), "#0.0")”。如果这些都不起作用,你可以使用“Replace(Value, ",", ".")”进行替换。如果你没有使用千位分隔符,那么这应该是可行的。

我只是执行了 xmlNode.Text = cell.Value。我尝试了你的建议,但结果仍然将“,”作为小数分隔符。 - bombardier
使用Replace是我的最终解决方案。我只需要确保使用Format函数时没有同时包含小数点和千位分隔符的数字即可。 - bombardier

3
使用Str函数。它仅将句点.作为有效的小数分隔符。
Dim d as Double
Dim s as String
d = 3.25
s = Str(d) 
' s is now " 3.25"

请注意,Str 保留数字符号的前导空格。如果您不想在正数前面有前导空格,只需对结果进行 Trim 处理:
s = Trim(Str(d))
' s is now "3.25"

我在双向操作时遇到了问题,需要能够读取和写入XML值。我现在有以下代码用于读取:If CDbl("1.000") = 1000 Then num = CDbl(Replace(value, ".", ",")) Else num = CDbl(value) End If - bombardier
你没有要求双向工作的功能...但是你的解决方案看起来是一个不错的方法。 - Jean-François Corbett

1

@Jean-Francois,既然我们正在谈论i18n,您应该使用CStr(用于国际应用程序)函数,而不是Str(其中.点是浮点数的分隔符,在法语中没有太多用处,逗号,是分隔符例如:7,54)

Sub myFunction()
    Dim num As Double
    Dim str As String

    num = 3.251
    str = CStr(num) ' convert a number into a String

    num = Val(str) ' convert a String into an integer
    num = Trim(str) ' convert a String into a Variant

    str = Trim(num) ' notice this works the other way around

End Sub

问题是:“我需要一种方法来强制在所有情况下使用 . 作为小数分隔符存储十进制数。” 这就是我的答案所做的。 - Jean-François Corbett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接