按命名范围和 JavaScript API 评估公式
Evaluate a formula by named ranges and JavaScript API
我正在寻找 的方法。我在想命名范围是否可以提供帮助。
我做了this gist in Script Lab, part of which is as follows. In this sample, we see formulas such as =100+200
, =A2
, =name2+100
can be indeed evaluated by named ranges; evaluated values can be accessed by the property value。但是,=Sample!A2+100
不能很好的评价; A2
的值在这里似乎被认为是 0。
那么有谁知道如何修复代码以使像 =Sample!A2+100
这样的公式被正确计算?
$("#test").click(() => tryCatch(test));
async function test() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
// setup cell values
sheet.getRange("A2").values = [[3000]];
await context.sync();
// clean names:
const name1 = sheet.names.getItemOrNullObject("name1");
const name2 = sheet.names.getItemOrNullObject("name2");
const name3 = sheet.names.getItemOrNullObject("name3");
const name4 = sheet.names.getItemOrNullObject("name4");
name1.load();
name2.load();
name3.load();
name4.load();
await context.sync();
if (name1.value) name1.delete();
if (name2.value) name2.delete();
if (name3.value) name3.delete();
if (name4.value) name4.delete();
await context.sync();
// add names:
sheet.names.add("name1", "=100+200"); // "value" evaluates well to 300
sheet.names.add("name2", "=A2"); // "value" evaluates to "Sample!$A"
sheet.names.add("name3", "=name2+100"); // "value" evaluates well to 3100
sheet.names.add("name4", "=Sample!A2+100"); // "value" evaluates to 100, which is wrong. A2 is considered here as 0.
await context.sync();
// show names:
const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load();
await context.sync();
console.log("This worksheet contains " + namedItems.items.length + " named items.");
for (let i = 0; i < namedItems.items.length; i++) {
console.log(JSON.stringify(namedItems.items[i])) + "\n";
}
await context.sync();
});
}
结果:
如果更新这两行:
sheet.names.add("name2", "=A2"); // "value" evaluates to "Sample!$A"
sheet.names.add("name4", "=Sample!A2+100"); // "value" evaluates to 100, which is wrong. A2 is considered here as 0.
对此:
sheet.names.add("name2", "=$A"); // "value" evaluates to "Sample!$A"
sheet.names.add("name4", "=Sample!$A+100"); // "value" evaluates to 100, which is wrong. A2 is considered here as 0.
我显示问题已解决。
我正在寻找
我做了this gist in Script Lab, part of which is as follows. In this sample, we see formulas such as =100+200
, =A2
, =name2+100
can be indeed evaluated by named ranges; evaluated values can be accessed by the property value。但是,=Sample!A2+100
不能很好的评价; A2
的值在这里似乎被认为是 0。
那么有谁知道如何修复代码以使像 =Sample!A2+100
这样的公式被正确计算?
$("#test").click(() => tryCatch(test));
async function test() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
// setup cell values
sheet.getRange("A2").values = [[3000]];
await context.sync();
// clean names:
const name1 = sheet.names.getItemOrNullObject("name1");
const name2 = sheet.names.getItemOrNullObject("name2");
const name3 = sheet.names.getItemOrNullObject("name3");
const name4 = sheet.names.getItemOrNullObject("name4");
name1.load();
name2.load();
name3.load();
name4.load();
await context.sync();
if (name1.value) name1.delete();
if (name2.value) name2.delete();
if (name3.value) name3.delete();
if (name4.value) name4.delete();
await context.sync();
// add names:
sheet.names.add("name1", "=100+200"); // "value" evaluates well to 300
sheet.names.add("name2", "=A2"); // "value" evaluates to "Sample!$A"
sheet.names.add("name3", "=name2+100"); // "value" evaluates well to 3100
sheet.names.add("name4", "=Sample!A2+100"); // "value" evaluates to 100, which is wrong. A2 is considered here as 0.
await context.sync();
// show names:
const namedItems = context.workbook.worksheets.getActiveWorksheet().names.load();
await context.sync();
console.log("This worksheet contains " + namedItems.items.length + " named items.");
for (let i = 0; i < namedItems.items.length; i++) {
console.log(JSON.stringify(namedItems.items[i])) + "\n";
}
await context.sync();
});
}
结果:
如果更新这两行:
sheet.names.add("name2", "=A2"); // "value" evaluates to "Sample!$A"
sheet.names.add("name4", "=Sample!A2+100"); // "value" evaluates to 100, which is wrong. A2 is considered here as 0.
对此:
sheet.names.add("name2", "=$A"); // "value" evaluates to "Sample!$A"
sheet.names.add("name4", "=Sample!$A+100"); // "value" evaluates to 100, which is wrong. A2 is considered here as 0.
我显示问题已解决。