首页 > 解决方案 > 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;
}

我想这就是我需要的。我想我可以通过将值放入参数中来将值写入变量并将其发送到一个函数并将其返回。你能帮我这个吗?

谢谢您的帮助!

标签: google-apps-script

解决方案


尝试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溢出


推荐阅读