2

在 Excel 宏中,您可以执行以下简单操作:

Range("C8:G8,C12:H12,C19:I19").Value = 1

这让我有机会创建复杂的范围选择并减少 api 调用和同步队列的数量。

但是当我这样做时

const range = activeWorkSheet.getRange("C8:G8,C12:H12,C19:I19");       
range.format.fill.color = "yellow";

我明白了

InvalidArgument:参数无效或丢失或格式不正确。

我也没有 getJoinRange 或 getUnionRange 可以使用。

有解决方法吗?我遇到了一些性能问题,因为我做了一些基于奇数/偶数格式化一行的事情。

4

1 回答 1

1

即将推出一个测试版功能,它将允许多区域范围。它的语法仍然是待定,它可能正是你写的(允许范围是一个多区域范围),或者我们可能将 Range 保留为单个连续对象并具有类似的并行方法worksheet.getMultiAreaRange("C8:G8, C12:H12, C19:I19)来做你想做的事.

另外,你有什么版本的 Office,你是否在 Insider Fast 上?

回覆。性能,您可以将您的确切用例发布为最小片段吗?您可能可以进行一些优化,即使是在多区域范围内。

更新

如果您所做的只是 3x3 或 5x5(即,不是超大的),您不需要多区域支持。你可以这样做:

await Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getActiveWorksheet();
    const rowCount = 5;
    const columnCount = 5;
    const range = sheet.getRangeByIndexes(0, 0, rowCount, columnCount);
    for (let row = 0; row < rowCount; row = row + 2) {
        range.getRow(row).format.fill.color = "purple";
    }

    await context.sync()
});
于 2018-06-01T00:45:18.573 回答