google-apps-script - Ranges 中的值(按命名范围)到变量
问题描述
我在电子表格中有许多命名范围。
我需要通过当前行(e)和当前列通过命名范围从区域获取值并将其写入变量。我写了很多相同的脚本
function sendEmailClerck(e){
var sheet = SpreadsheetApp.getActive().getSheetByName('Ответы на форму (1)');
var idRow = e.range.getRow();
var name = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqUser').getColumn()).getValue();
var cli = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqCLI').getColumn()).getValue();
var priority = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqPriority').getColumn()).getValue();
var date = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqDateStart').getColumn()).getValue();
var date2 = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqDateCloseU').getColumn()).getValue();
var tip = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqType').getColumn()).getValue();
var users = sheet.getRange(idRow, SpreadsheetApp.getActiveSpreadsheet().getRangeByName('ReqAddress').getColumn()).getValue();
我在这个网站上找到了一个脚本,但我不明白如何在这里使用它
function getRangeName(A1Notation) {
var rangeName = "";
//get all the name ranges of the sheet
var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getNamedRanges();
// loop on all the names range of the sheet
for(i=0;i<namedRanges.length;i++){
//if it's the same A1 Notation
if(namedRanges[i].getRange().getA1Notation() == A1Notation)
rangeName = namedRanges[i].getName();
}
//will return the name of the range or "" if there is no range
return rangeName;
}
我想这就是我需要的。我想我可以通过将值放入参数中来将值写入变量并将其发送到一个函数并将其返回。你能帮我这个吗?
谢谢您的帮助!
解决方案
尝试Array.map()
使它更易于管理,如下所示:
function sendEmailClerck(e) {
const sheet = SpreadsheetApp.getActive().getSheetByName('Ответы на форму (1)');
const rangeNames = [
'ReqUser',
'ReqCLI',
'ReqPriority',
'ReqDateStart',
'ReqDateCloseU',
'ReqType',
'ReqAddress',
];
const [name, cli, priority, date, date2, tip, users] = rangeNames.map(rangeName => {
const column = sheet.getRange(rangeName).getColumn();
return sheet.getRange(e.range.rowStart, column).getValue();
});
}
不过,您可能需要重新考虑整个方法。该代码效率非常低,因为它一个一个地读取每个单元格。您可能应该只使用一次sheet.getDataRange().getValues()
调用并从它返回的二维数组中解析数据。
学习 Google Apps 脚本的一些最佳资源包括初学者指南、 新的 Apps 脚本编辑器指南、Google Sheets 代码实验室的 Apps 脚本基础、 扩展 Google 表格页面、 javascript.info、 Mozilla 开发者网络和Apps Script at Stack溢出。
推荐阅读
- python - 如何检测 PDF 中的选项卡?
- javascript - 如何在Angular中的时间间隔后更改图像?
- ios - 如何在swift5中删除这条黑线
- google-classroom - 有没有办法使用 Google Classroom API 更改课程标题中的图像?
- delphi - 什么是“在标签上显示图像”?
- html - CSS 响应式裁剪图像
- python - opentelemetry 显式添加指标 - azure monitor - opentelemetry
- python - 订购列表中的项目,但不断收到 AttributeError
- css - CSS Grid 从最后填充项目
- python - Python中的相对文件路径