google-apps-script - 有没有更快的方法来使用 Google Appscript 显示/隐藏多列?
问题描述
我目前有下面的脚本,我已将每个脚本分配给我的电子表格上的一个按钮,以便用户可以显示或隐藏下面所述的列。我的问题是 - 有没有更快的方法来达到同样的结果?该脚本需要几秒钟,因此可以加快速度。
function showColumns() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('National FY21 - 23');
sheet.showColumns(4,6);
sheet.showColumns(12,6);
sheet.showColumns(20,6);
sheet.showColumns(28,6);
sheet.showColumns(36,6);
sheet.showColumns(44,6);
sheet.showColumns(52,6);
sheet.showColumns(60,6);
sheet.getRange('B3').setValue('Y');
}
function hideColumns() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('National FY21 - 23');
sheet.hideColumns(4,6);
sheet.hideColumns(12,6);
sheet.hideColumns(20,6);
sheet.hideColumns(28,6);
sheet.hideColumns(36,6);
sheet.hideColumns(44,6);
sheet.hideColumns(52,6);
sheet.hideColumns(60,6);
}
解决方案
有没有更快的方法来使用 Google Appscript 显示/隐藏多列?
回答:
有点儿; 您可以在一次调用中显示所有列,但如果使用内置的SpreadsheetApp
Apps 脚本服务,则必须以这种方式隐藏。
更多信息:
由于您希望隐藏的列由您不想隐藏的列分隔,因此除了单独调用每组列之外,没有其他方法可以隐藏它们。
但是,您可以调用sheet.showColumns(4, 62)
以在一次调用中显示范围内的所有列,而不是单独调用每个列子集。
但是,这仅适用于中间没有隐藏的列但您不想显示的情况。如果是这种情况,那么不幸的是,像你一样明确地单独调用它们是唯一的方法。
编辑:正如Tanaike在对此答案的评论中提到的,您也可以在一个请求中进行隐藏调用,但要执行此操作,您需要通过Resources > Advanced Google services...
菜单项激活电子表格 API 高级 Google 服务。然后,这将利用一个batchUpdate
请求,该请求包含一个 API 调用中的所有请求。这有点复杂,但肯定是可行的。
代码:
正如我之前提到的,您可以修改您的showColumns()
函数以仅在一次调用中显示所有列:
function showColumns() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('National FY21 - 23');
sheet.showColumns(4, 62);
sheet.getRange('B3').setValue('Y');
}
按照此答案的“更多信息”部分中的说明启用电子表格 API 高级 Google 服务后,您可以构建批处理请求并将其发送到 API,并对hideColumns()
函数进行以下修改:
function hideColumns() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheet = ss.getSheetByName('National FY21 - 23')
var sheetId = sheet.getSheetId();
var startColumns = [4, 12, 20, 28, 36, 44, 52, 60];
var requests = []
startColumns.forEach(function(x) {
requests.push({
'updateDimensionProperties': {
"range": {
"sheetId": sheetId,
"dimension": 'COLUMNS',
"startIndex": x - 1,
"endIndex": x + 5,
},
"properties": {
"hiddenByUser": true,
},
"fields": 'hiddenByUser',
}
})
});
Sheets.Spreadsheets.batchUpdate({"requests": requests }, ssId)
}
参考:
推荐阅读
- sftp - Mule sftp 入站连接器在处理 20K 文件后停止轮询文件
- c++ - 何时调用 C++ 析构函数类?
- javascript - 您如何转换音频进度条码以使其具有渐变?
- odoo - 如何在 Odoo 中列出当前电子商务类别的子类别?
- javascript - 有没有办法将变量从 Javascript 中的不同模块传递给导出的生成器?
- php - 上传图片时数组到字符串的转换
- python-sphinx - 无法导入扩展... SphinxDirective
- java - 如何为特定联系人设置自定义铃声?
- flutter - 如何使用 Firebase Auth 为应用创建集成测试?
- python - 访问云上的 S3 文件