将一组值分配给一个范围
Assign an array of values to a range
我想用一组值启动一系列工作表。我有以下代码。
function initiate(address, values) {
return Excel.run(function (ctx) {
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
var range = sheet.getRange(address);
var range.values = values;
return ctx.sync()
}
}
我的测试表明 仅当 values
具有与 address
完全相同的尺寸(即高度、宽度)时,或者当 values
是单个值。否则会报错。
有人可以证实吗?
如果是这样,我需要调整address
以适应values
的维度。很容易获得 values
的维度,但我无法 find a function 获得范围,例如,1 个左上角单元格 + 1 个行数 + 1 个列数,或 1 个左上角单元格和右下角的 1 个单元格。
我是不是漏掉了什么?
在 VBA 中,您将使用 Range.Resize
. In OfficeJS there seems to be a function called getResizedRange 其中
[g]ets a Range object similar to the current Range object, but with its bottom-right corner expanded (or contracted) by some number of rows and columns.
不幸的是,它接受 delta 值,因此您需要计算当前范围大小与目标大小之间的差异。
例如,如果您想通过 cols
个单元格获得 rows
的范围,您可以尝试
var originalRange = sheet.getRange(address);
var range = originalRange.getResizedRange(
rows - originalRange.rowCount, cols - originalRange.columnCount);
正如 CompuChip 所说,(还)没有 API 用于将范围调整为特定的 绝对 大小,尽管即将推出。
就是说:如果您有一个数组,只需从一个单元格开始,然后按数组的行数减 1(即 array.length - 1
)调整其大小,然后按列减 1 (array[0].length - 1
)
const values = [
[1, 2, 3],
["Hello", "Bonjour", "Привет"]
]
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
const range = sheet.getRange("D3").getResizedRange(
values.length - 1, values[0].length - 1);
range.values = values;
await context.sync();
});
您可以在新的 Script Lab (https://aka.ms/getscriptlab). Simply install the Script Lab add-in (free), then choose "Import" in the navigation menu, and use the following GIST URL: https://gist.github.com/Zlatkovsky/6bc4a7ab36a81be873697cab0fa0b653. See more info about importing snippets to Script Lab.
中单击五下即可实时试用此代码段
我想用一组值启动一系列工作表。我有以下代码。
function initiate(address, values) {
return Excel.run(function (ctx) {
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
var range = sheet.getRange(address);
var range.values = values;
return ctx.sync()
}
}
我的测试表明 仅当 values
具有与 address
完全相同的尺寸(即高度、宽度)时,或者当 values
是单个值。否则会报错。
有人可以证实吗?
如果是这样,我需要调整address
以适应values
的维度。很容易获得 values
的维度,但我无法 find a function 获得范围,例如,1 个左上角单元格 + 1 个行数 + 1 个列数,或 1 个左上角单元格和右下角的 1 个单元格。
我是不是漏掉了什么?
在 VBA 中,您将使用 Range.Resize
. In OfficeJS there seems to be a function called getResizedRange 其中
[g]ets a Range object similar to the current Range object, but with its bottom-right corner expanded (or contracted) by some number of rows and columns.
不幸的是,它接受 delta 值,因此您需要计算当前范围大小与目标大小之间的差异。
例如,如果您想通过 cols
个单元格获得 rows
的范围,您可以尝试
var originalRange = sheet.getRange(address);
var range = originalRange.getResizedRange(
rows - originalRange.rowCount, cols - originalRange.columnCount);
正如 CompuChip 所说,(还)没有 API 用于将范围调整为特定的 绝对 大小,尽管即将推出。
就是说:如果您有一个数组,只需从一个单元格开始,然后按数组的行数减 1(即 array.length - 1
)调整其大小,然后按列减 1 (array[0].length - 1
)
const values = [
[1, 2, 3],
["Hello", "Bonjour", "Привет"]
]
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
const range = sheet.getRange("D3").getResizedRange(
values.length - 1, values[0].length - 1);
range.values = values;
await context.sync();
});
您可以在新的 Script Lab (https://aka.ms/getscriptlab). Simply install the Script Lab add-in (free), then choose "Import" in the navigation menu, and use the following GIST URL: https://gist.github.com/Zlatkovsky/6bc4a7ab36a81be873697cab0fa0b653. See more info about importing snippets to Script Lab.
中单击五下即可实时试用此代码段