如果工作表名称为Sheet1
,我希望在该工作表的单元格中使用所有公式的数组。像这样:
Excel.run(function (ctx) {
var formulas = getAllFormulasOfSheet(ctx, 'Sheet1')
// or
getAllFormulasOfSheet(ctx, 'Sheet1').then(function(result){
var formulas = result;
});
// formulas should be like:
['SUM(A1:B3)', 'SUM(A3:C3)']
})
答案 0 :(得分:3)
使用usedRange公式可能更合理,因为您不需要完整的公式。下面的脚本将导致返回使用范围的二维数组公式。 [['=sum(a1:b2)', '=sum(a2:b2)']]
。如果需要,您还可以加载formulaR1C1
或formulaLocal
。不支持检索无界范围(整行,列,表)。你必须对它们调用usedRange()方法来获取所有有用的单元格。
async function getFormulas() {
try {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getItem("Sample");
const range = sheet.getUsedRange();
// const range = sheet.getRange("B2:E6"); //if you need specific address. You can also use named item based fetch.
range.load("formulas");
await context.sync();
console.log(JSON.stringify(range.formulas, null, 4));
});
}
catch (error) {
//handle error
}
}
答案 1 :(得分:2)
(Sudhi的答案是正确的,是第一个,所以它应该是“已接受”的答案。我正在添加这个答案以提供一些补充信息。)
正如Sudhi的回答所示,您应该使用Worksheet.GetUsedRange()
方法获取实际使用的工作表的范围,然后引用该范围的formulas
属性来标识该范围的公式包含。
但请注意,Range.formulas
属性将包含一系列数组,其中包含范围内所有单元格的内容 - 而不仅仅是范围中的公式。例如,如果工作表包含此数据,则只有范围E3:E5
中的单元格和范围C6:E6
中的单元格包含公式:
然后工作表的“使用范围”的Range.formulas
属性将返回此JSON:
[
[
"Product",
"Qty",
"Unit Price",
"Total Price"
],
[
"Almonds",
2,
7.5,
"=C3*D3"
],
[
"Coffee",
1,
34.5,
"=C4*D4"
],
[
"Chocolate",
5,
9.56,
"=C5*D5"
],
[
"TOTAL",
"=SUM(C3:C5)",
"=SUM(D3:D5)",
"=SUM(E3:E5)"
]
]
我已经创建了一个可以与Script Lab(一个免费的插件,你可以在这里找到:aka.ms/getscriptlab)一起使用的要点,看看这一切是如何工作的。在Excel中安装Script Lab加载项后,打开脚本实验室代码窗格,从菜单中选择导入,然后导入此要点:{{ 3}}