我所做的:
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 中以德语为标准语言编写英文公式吗?
编辑 :
我会标记 Michael Zlatkovsky 的答案,因为它有效。但我没有使用它。问题是我收到很多“参数无效或丢失或格式不正确”。
我在 Office Dev Center forum 中问过同样的问题并且建议使用 Context.displayLanguage或 Context.contentLanguage找到语言并使用不同的公式。但这不可能是普遍的。
我现在使用的是在一些工作表和一些单元格(隐藏)中编写公式,然后在其他单元格中使用 FORMULATEXT 以获得正确的公式。例如,如果在单元格 P2 中是这个公式:
=COUNTIF(Test[@[364]:[0]];"<=0")
在 P3 中:
=FORMULATEXT(P2)
加载 Excel 表后,您会得到正确语言的公式,我直接在表格中使用它。尽管公式中有错误,它还是被翻译了。这里是德语:
=ZÄHLENWENN(Test[@[364]:[0]];"<=0")
最佳答案
Office.js Excel API(如之前的 VBA)旨在与语言/区域设置无关。也就是说,当您将公式设置为 range.formulas
,它被设计为只解释英语输入(这就是为什么我们也有 range.formulasLocal
,对应于特定于语言环境的公式版本)。所以你描述的行为,设置 SUM
并期望德语 Excel 将其解释为 SUMME
绝对是应该的。
有几个问题可以帮助我们对此进行调查:
1)您可以尝试设置range.formulas
,而不是通过表格值设置公式?
2) 如果可行,设置range.values = yourFormula
怎么样? ?我认为这应该像#1一样工作,但只是想确定一下。
关于excel - 如何在 Excel 中从 Javascript Api 编写一个独立于用户语言的公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482319/