У меня есть кусок кода (c ++), который пишет некоторые значения с плавающей точкой, чтобы преуспеть, как это:
...
values[ position ].bstrVal = formattedValue;
values[ position ].vt = VT_BSTR;
...
как вы можете видеть, эти значения с плавающей запятой хранятся в виде строки, а десятичная точка форматируется по-разному, например:
«110.000000», «20.11» и т. Д. (Этот пример для английского языка)
Теперь он отлично работает, когда используется английская локаль. Однако, когда я переключаюсь на немецкий язык на панели управления, десятичная точка изменяется на «,» (и это нормально), но после передачи этих локализованных строк в Excel они не конвертируются правильно. Например, в случае написания «110,000000» я получаю 100 миллионов в Excel. Другие значения, такие как «20,11», остаются в виде текста.
Единственный способ исправить это — переписать десятичную точку с помощью «.» в моей программе, прежде чем писать в Excel. Любые идеи, почему преобразование не учитывает локали при использовании VT_BSTR?
Я также должен добавить, что я пытался переключить язык в моей программе с языка по умолчанию на немецкий — но все равно не повезло.
заранее спасибо
Никогда не стоит позволять Excel угадывать тип значения. Делать не используйте VT_BSTR, значение валюты должно иметь тип варианта VT_CY. Назначьте члену cyVal значение. Это 8-байтовое целочисленное значение (член типа int64 типа LONGLONG), сумма в валюте, умноженная на 10 000. Десять тысяч 🙂
Других решений пока нет …