我想使用 Excel Online 工作簿的 Office 脚本隐藏某些列。 我使用录音机来创建脚本。 但当我运行它时,却出现了错误。 以下是录制的脚本:
function main(workbook: ExcelScript.Workbook) {
let lockbox = workbook.getTable("Lockbox");
// Set visibility of column(s) at range D:P on lockbox to true
lockbox.getRange("D:P").setColumnHidden(true);
// Set visibility of column(s) at range R:V on lockbox to true
lockbox.getRange("R:V").setColumnHidden(true);
// Set visibility of column(s) at range AB:AB on lockbox to true
lockbox.getRange("AB:AB").setColumnHidden(true);
// Set visibility of column(s) at range AE:AO on lockbox to true
lockbox.getRange("AE:AO").setColumnHidden(true);
}
问题如下,但不明白为什么它不起作用:
[4, 19] Expected 0 arguments, but got 1.
[6, 19] Expected 0 arguments, but got 1.
[8, 19] Expected 0 arguments, but got 1.
[10, 19] Expected 0 arguments, but got 1.
对于 Excel 表格,
getRange()
的工作方式与工作表的工作方式略有不同。与工作表不同,表的 getRange()
接受零个参数。这是一个返回与表关联的范围的函数调用。如果使用 getColumn()
函数,您可以获得与列关联的范围。据我所知,Excel 表格的列函数都不支持列字母或一系列列字母。
最简单的解决方法是使用包含表格的工作表。一旦完成,您只需更新隐藏列的代码即可使用工作表而不是密码箱。完成此操作后,代码应该按预期工作。您可以在此处查看如何执行此操作的示例:
function main(workbook: ExcelScript.Workbook) {
let lockbox = workbook.getTable("Lockbox");
let ws: ExcelScript.Worksheet = lockbox.getWorksheet()
// Set visibility of column(s) at range D:P on lockbox to true
ws.getRange("D:P").setColumnHidden(true);
// Set visibility of column(s) at range R:V on lockbox to true
ws.getRange("R:V").setColumnHidden(true);
// Set visibility of column(s) at range AB:AB on lockbox to true
ws.getRange("AB:AB").setColumnHidden(true);
// Set visibility of column(s) at range AE:AO on lockbox to true
ws.getRange("AE:AO").setColumnHidden(true);
}
您还可以合并行以将列隐藏到一行中,如下所示:
function main(workbook: ExcelScript.Workbook) {
let lockbox = workbook.getTable("Lockbox");
let ws: ExcelScript.Worksheet = lockbox.getWorksheet()
ws.getRanges("A:A,R:V,AB:AB,AE:AO").getAreas().forEach(cols=>cols.setColumnHidden(true));
}
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet()
let table = sheet.getTables()[0] // table1
let col = [0, 2, 4]
col.reverse().forEach(
i => table.getRange().getColumn(i).delete(ExcelScript.DeleteShiftDirection.left)
)
}