Как преобразовать строку в число и наоборот в Excel - PullRequest
4 голосов
/ 29 мая 2011

У меня есть несколько XML-файлов, которые содержат десятичные числа, хранящиеся с '.'в качестве десятичного разделителя.Я создал книгу Excel, которая используется для редактирования данных в этом XML.MSXML используется для чтения данных из XML, которые затем отображаются в таблицах.После сохранения данных я изменяю структуру DOM новыми значениями, считанными из таблиц, и сохраняю XML.

Проблема заключается в том, что при преобразовании десятичных чисел обратно в строки, чтобы сохранить их как значения в XML, десятичный разделитель, которыйопределяется пользователем в Windows, используются региональные настройки.

Мне нужен способ принудительного хранения десятичных чисел с помощью '.'в качестве десятичного разделителя во всех случаях.Возможно ли это?

Ответы [ 3 ]

7 голосов
/ 29 мая 2011

Как вы модифицируете структуру DOM новыми значениями - программно? Как?

Можно ли использовать Format(Cell.value, "#0.0")? Также попробуйте Format(CDbl(Cell.Value), "#0.0"). Если это не сработает, вы можете просто добавить Replace(Value, ",", ".")? Это должно быть хорошо, если вы не используете разделители тысяч.

3 голосов
/ 30 мая 2011

Используйте функцию 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"
1 голос
/ 30 мая 2011

@ Жан-Франсуа, поскольку мы говорим о i18n, вы должны использовать функцию CStr (для международных приложений) вместо Str (где. Dot - разделитель для плавающего числа, а не Много пользы во французском, где запятая, это разделитель, например: 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
...