ivas, спасибо! Значит, всё-таки, это нам не снится, а происходит наяву... угу...
Что ж, можно попробовать поразбираться дальше, померяться региональными и иными настройками. Пока же предлагаю (надеюсь, как временное решение) написанный по горячим следам статический метод для определения языка формул:
X++:
// Определение языка формул Excel для свойства Range.Formula
// (именно Formula, а не FormulaLocal !!!)
// подробности см. здесь:
// [noparse]http://www.axforum.info/forums/showthread.php?p=195646#post195646[/noparse]
// СПОСОБ:
// помещаем в "международное" свойство формулу на русском языке
// и проверяем последующую реакцию Excel
// по окончании проверки удаляем временные объекты
static str excelFormulaLanguage(COM _excelApplication = null)
{
str ret;
COM workbook;
COM range;
COMVariant rangeText;
boolean separateSession = false;
;
// если сессия не передается параметром...
if (! _excelApplication)
{
// ...то пробуем прицепиться к существующей
_excelApplication = COM::getObject('Excel.Application');
// если существующей тоже нет...
if (! _excelApplication)
{
// то создаем отдельную - кратковременную - только лишь для определения языка
_excelApplication = new COM('Excel.Application');
separateSession = true;
}
}
workbook = _excelApplication.Workbooks();
workbook = workbook.Add();
range = _excelApplication.Range('A1');
// помещаем в "международное" свойство формулу на русском языке
// и проверяем последующую реакцию Excel
range.NumberFormat('0'); // на всякий случай
range.Formula('=СУММ(1+1)');
range.Calculate(); // на всякий случай
rangeText = range.Text();
if (rangeText.bStr()=='2') // здесь ожидаются значения: #NAME? или #ИМЯ? или 2
ret = 'Russian';
else
ret = 'English';
workbook.Close(false); // закрываем без сохранения нашу временную книгу
if (separateSession)
_excelApplication.Quit();
return ret;
}