Цитата:
Сообщение от
Maximin
Вообще кучеряво будет, если при формировании формата юзать WinAPI и определять текущий разделитель.

Проще определять текущий разделитель через настройки собственно Excel через метод
m_comApplication.International()
Не знаю, сработает ли это в 2007, но для 2003 в классе ComExcelDocument_RU я добавил такой метод
X++:
// 1
// Возвращает указанную региональную настройку
// Поскольку различные региональные настройки имеют разный тип, то используется контейнер из одного элемента
// Возвожные значения параметра смотри в справке по Visual Basic в Excel на свойство International
// Наиболее нужные
/*
xlDecimalSeparator = 3 - символ разделитель целой и дробной части
xlThousandsSeparator = 4 - символ разделитель троек цифр
xlDateSeparator = 17 - символ разделитель в датах
xlTimeSeparator = 18 - символ разделитель часов и минут
xlGeneralFormatName = 26 - строка имени основного формата данных (обычно General)
xl24HourClock = 33 - true - если часы отображаются в 24 часовом формате, false - если в 12 часовом
xl4DigitYears = 43 - true - если отображаются 4 знака года, false - если 2
xlDateOrder = 32 - как отображается дата: 0 - месяц/день/год, 1 - день/месяц/год, 2 - год/месяц/день
*/
container getInternational(int _international)
{
COMVariant comInternational;
container con = connull();
;
if (m_comApplication)
{
try
{
comInternational = m_comApplication.International(_international);
switch (comInternational.variantType())
{
case COMVariantType::VT_BOOL:
{
con = conIns(con,1,comInternational.boolean());
break;
}
case COMVariantType::VT_BSTR:
{
con = conIns(con,1,comInternational.bStr());
break;
}
case COMVariantType::VT_DATE:
{
con = conIns(con,1,comInternational.date());
break;
}
case COMVariantType::VT_DECIMAL:
{
con = conIns(con,1,comInternational.decimal());
break;
}
case COMVariantType::VT_INT:
{
con = conIns(con,1,comInternational.int());
break;
}
} // switch (comInternational.variantType())
}
catch (Exception::Error || Exception::Internal)
{
throw error("Ошибка в функции " + funcname());
}
} // if (m_comApplication)
return con;
}
Т.е. в методе класса ExcelDocument.setCellFormat() делать анализ текущего символа-разделителя и заменять его в маске шаблона