Тема, на самом деле, интересная и до конца не решенная.
В интернете ответа пока не нашёл, но нашёл достаточно подробное описание проблемы:
http://www.gotdotnet.ru/Forums/Windows/107618.aspx
Цитата:
Сообщение от
туда
Проблема состоит в следующем. Мне надо сформировать из проекта на C# таблицу в Excel. В ней кроме данных должны присутствовать и формулы - самые простые - Сумма. Проблема в том, что в разных версиях Excel функции называются по разному - СУММ() в русской версии, и SUM() - в английской. Мне надо, чтобы выходная таблица корректно формировалась независимо от локализации Excel'я. Среди свойств ячейки (диапазона) есть Formula и FormulaLocal. Как я полагал, в свойстве FormulaLocal хранится локализованный вариант формулы ( например, СУММ(E2:E8) ), а в Formula - независимый от локализации (то есть - SUM(E2:E8) ). Но когда я присваиваю при формировании таблицы из моей программы свойству Formula нужной ячейки значение "=SUM(E2:E8)", Excel его не понимает (экспериментирую с русской версией). Понимает только "=СУММ(E2:E8)". С русской версией Excel моя программа будет работать нормально, а как быть, если на машине пользователя стоит английская версия?
..........
(вопрошающему отвечают, но, как оказывается, не совсем удачно):
Используйте свойство Formula. Присваивайте ему формулу в АНГЛИЙСКОМ варианте.
Пример: Range("A10").Formula = "=SUM(A1:A9)"
В этом случае свойство FormulaLocal вернет правильную локализованную версию формулы: "=СУММ(A1:A9)" для русского офиса.
..........
В том то и дело, что это не работает. Я это указал в начальном письме. Если я присваиваю свойству Formula значение "=SUM(A1:A9)", то в ячейке появляется сообщение "#ИМЯ?", т.е. - формула содержит нераспознанный текст. А если я пишу макрос напрямую на VBA, не через C#, то тогда все нормально. Этот глюк не изменился и после апдейта на Office XP. Вот я и задал этот вопрос - может дело еще в чем-то.
Предлагаю Antoncheg'у и всем желающим поучаствовать в небольшом эксперименте, запустив следующий маленький джобик. Разыскиваются люди, у которых в боксе будет выдано значение 2.
X++:
static void Job161_TestFormula(Args _args)
{
COM xlApp = new COM ('Excel.Application');
COM wbk;
COM rng;
COMVariant cv;
;
wbk = xlApp.Workbooks();
wbk = wbk.Add();
rng = xlApp.Range('A1');
rng.Formula('=СУММ(1+1)');
cv = rng.Text();
// здесь ожидаются значения: #NAME? или #ИМЯ? или 2
box::info(cv.bStr());
wbk.Close(false); // чтобы не оставался скрытый экземпляр Excel
xlApp.Quit();
}
Припоминаю, что эта проблема возникала у Ивана Кашперука в теме:
Помогите сделать действие в Excel через COM . И мы тогда никакого вразумительного ответа не нашли, кроме того, что зафиксировали проблему