如何使用 Excel Javascript 插件计算所有非空白单元格?
How to count all non-blank cells using Excel Javascript Addins?
我正在创建一个 office js 插件,它将数据从 Table 1 的底部插入到 Table 2,但我找不到可行的方法。
我试过使用 Excel.Functions.countA()
但我似乎无法从中得到 NaN 以外的值。这是我正在使用的代码:
async function run() {
try {
await Excel.run(async context => {
var sheet1Name = "Sheet1";
var sheet1RangeAddress = "B:B";
var sheet2Name = "Sheet2";
var sheet2RangeAddress = "A2:P2";
var sheet2Range = context.workbook.worksheets.getItem(sheet2Name).getRange(sheet2RangeAddress);
sheet2Range.insert("Down");
var sheet1CellAddress = context.workbook.worksheets.getItem(sheet1Name).getRange(sheet1RangeAddress).load("address");
var sheet1RangeLength = Number(context.workbook.functions.countA(sheet1CellAddress));
var sheet1LastCell = context.workbook.worksheets.getItem(sheet1Name).getRangeByIndexes(3,1,sheet1RangeLength,1).getLastCell();
var sheet2Cell = context.workbook.worksheets.getItem(sheet2Name).getRange("A2");
sheet2Cell.values = [[ context.workbook.worksheets.getItem(sheet2Name).getRange("A2").copyFrom(sheet1LastCell) ]]
await context.sync();
});
} catch (error) {
console.error(error);
}
}
我在 Microsoft documentation 或在线工作示例中找不到任何有用的信息。有谁知道我做错了什么?
您代码中的这一行看起来有问题:
var sheet1RangeLength = Number(context.workbook.functions.countA(sheet1CellAddress));
Functions.countA
方法 returns 我认为不能转换为数字的 Excel.FunctionResult 对象。函数返回的计数将在返回对象的 value
属性 中。您需要加载该值才能读取它。试试用这两行代替:
var sheet1RangeLength = context.workbook.functions.countA(sheet1CellAddress).load("value");
await context.sync();
顺便说一句,下一行返回的是 Range 对象,而不是地址。没关系,因为 countA 接受一个 Range 对象参数,但是您的变量被误导了。另外,我认为最后的 load("address")
没有任何作用。
var sheet1CellAddress = context.workbook.worksheets.getItem(sheet1Name).getRange(sheet1RangeAddress).load("address");
如果您还没有看过这篇文章:Call built-in Excel worksheet functions。
我正在创建一个 office js 插件,它将数据从 Table 1 的底部插入到 Table 2,但我找不到可行的方法。
我试过使用 Excel.Functions.countA()
但我似乎无法从中得到 NaN 以外的值。这是我正在使用的代码:
async function run() {
try {
await Excel.run(async context => {
var sheet1Name = "Sheet1";
var sheet1RangeAddress = "B:B";
var sheet2Name = "Sheet2";
var sheet2RangeAddress = "A2:P2";
var sheet2Range = context.workbook.worksheets.getItem(sheet2Name).getRange(sheet2RangeAddress);
sheet2Range.insert("Down");
var sheet1CellAddress = context.workbook.worksheets.getItem(sheet1Name).getRange(sheet1RangeAddress).load("address");
var sheet1RangeLength = Number(context.workbook.functions.countA(sheet1CellAddress));
var sheet1LastCell = context.workbook.worksheets.getItem(sheet1Name).getRangeByIndexes(3,1,sheet1RangeLength,1).getLastCell();
var sheet2Cell = context.workbook.worksheets.getItem(sheet2Name).getRange("A2");
sheet2Cell.values = [[ context.workbook.worksheets.getItem(sheet2Name).getRange("A2").copyFrom(sheet1LastCell) ]]
await context.sync();
});
} catch (error) {
console.error(error);
}
}
我在 Microsoft documentation 或在线工作示例中找不到任何有用的信息。有谁知道我做错了什么?
您代码中的这一行看起来有问题:
var sheet1RangeLength = Number(context.workbook.functions.countA(sheet1CellAddress));
Functions.countA
方法 returns 我认为不能转换为数字的 Excel.FunctionResult 对象。函数返回的计数将在返回对象的 value
属性 中。您需要加载该值才能读取它。试试用这两行代替:
var sheet1RangeLength = context.workbook.functions.countA(sheet1CellAddress).load("value");
await context.sync();
顺便说一句,下一行返回的是 Range 对象,而不是地址。没关系,因为 countA 接受一个 Range 对象参数,但是您的变量被误导了。另外,我认为最后的 load("address")
没有任何作用。
var sheet1CellAddress = context.workbook.worksheets.getItem(sheet1Name).getRange(sheet1RangeAddress).load("address");
如果您还没有看过这篇文章:Call built-in Excel worksheet functions。