Показать сообщение отдельно
Старый 27.01.2004, 16:53   #4  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Регистрация: 30.04.2003
Адрес: Москва
Lightbulb
Вроде бы нашёл решение...

Делается с использованием International - свойства приложения Excel.
International(3) - это как раз десятичная точка. См. помощь по VB. Пришлось, правда, использовать дополнительный класс DVP_ComExcelDocument_RU, где есть соотв. метод, и открывать пустой файл (только на время определения локальных установок).
Я-то работаю с ComExcelDocument_RU, мне вышеупомянутый класс больше ни для чего не нужен (там нет других, нужных мне методов).

Вот такую ф-цию накропал:

#define.xlDecimalSeparator(3)
// somebody, 27.01.04
// возвращает символ десятичной точки из локальных настроек (обычно точка или запятая)
str decimalPointChar()
{
DVP_ComExcelDocument_RU dVP_ComExcelDocument_RU;
str ret;
;

dVP_ComExcelDocument_RU = new DVP_ComExcelDocument_RU();
dVP_ComExcelDocument_RU.newFile("");
dVP_ComExcelDocument_RU.visible(false);
ret = dVP_ComExcelDocument_RU.international(#xlDecimalSeparator).bstr();
dVP_ComExcelDocument_RU.closeDocument();
return ret;
}

В принципе так можно вытащить любую рег. настройку.
DVP_ComExcelDocument_RU возвращает m_comApplication.International(_parameter), где m_comApplication - это COM родительского класса ComOfficeDocument_RU.
Видимо, можно сделать и грамотнее, чтобы не пугать пользователя появившимся на долю секунды пустым XLS-файлом (visible до инициализации, к сожалению, не вызовешь)...

2-й вариант решения - просто вбить соотв. форматы в шаблон. Но опять же - не факт, что сложный шаблон (с условиями, например) будет работать в другой версии Office или с другими рег. настройками.

---
Axapta is my friend, but truth is more of value...