Как написать формулу из Javascript Api в Excel, не зависящую от языка пользователя?

Что я делаю:

var myTable = new Office.TableData();
.....
var y = [];
y.push(...);
.....
y.push('=SUM(Test[@[364]:[0]])/365');
y.push(...);
.....
myTable.rows.push(y);

и позже

binding.addRowsAsync(myTable.rows, function (addResult){....});

Теперь все в порядке, если пользователь использует английский язык в Excel. Но если он использует немецкий, появляется «#NAME?», Потому что на немецком языке SUM должно быть SUMME. Как написать формулу из Javascript Api, независимую от языка пользователя?

Или может возникнуть вопрос: могу ли я написать (в ячейке) формулу на английском языке в Excel с немецким языком в качестве стандартного?

Изменить:

Отмечу ответ Михаила Златковского, потому что он работает. Но я этим не пользуюсь. Проблема в том, что я получаю много сообщений «Аргумент недействителен, отсутствует или имеет неправильный формат».

Я задал тот же вопрос в форум Центра разработки Office и предложение было использовать Context.displayLanguage или Context.contentLanguage, чтобы найти язык и использовать разные формулы. Но это не может быть универсальным.

Сейчас я использую для записи формул на каком-то листе и в некоторых ячейках (скрытых), а затем использовать FORMULATEXT в другой ячейке, чтобы получить правильную формулу. Например, если в ячейке P2 есть эта формула:

=COUNTIF(Test[@[364]:[0]];"<=0")

и в P3:

=FORMULATEXT(P2)

после загрузки листа Excel вы получаете формулу на нужном языке, и я использую ее прямо в таблице. И, несмотря на ошибки в формуле, она переведена. Здесь по-немецки:

=ZÄHLENWENN(Test[@[364]:[0]];"<=0")

person Mottor    schedule 20.07.2016    source источник
comment
Просто предположение, но я думаю, что вы изменяете текст ячейки, а не формулы. Попробуйте покопаться в свойствах формул отдельных ячеек.   -  person ttaaoossuuuu    schedule 20.07.2016


Ответы (1)


API-интерфейсы Excel Office.js (например, VBA до них) не зависят от языка и локали. То есть, когда вы устанавливаете формулу на range.formulas, она предназначена только для интерпретации ввода на АНГЛИЙСКОМ языке (поэтому у нас также есть range.formulasLocal, соответствующий версиям формул для конкретного языка). Таким образом, поведение, которое вы описываете, - установка SUM и ожидание того, что немецкий Excel интерпретирует его как SUMME, абсолютно то, чем оно должно быть.

Несколько вопросов, которые помогут нам разобраться в этом:

1) Вместо того, чтобы устанавливать формулу с помощью табличного значения, не могли бы вы попробовать установить range.formulas?

2) Если это сработает, как насчет установки range.values = yourFormula? Я предполагаю, что это должно работать так же, как №1, но просто хотел убедиться.

person Michael Zlatkovsky - Microsoft    schedule 20.07.2016