你如何循环通过不同的控制选择细胞?

时间:2014-11-03 23:35:10

标签: google-apps-script

我正在编写一个脚本,可以在Google电子表格中规范化所选的电话号码:

/**
 * Normalizes phone numbers to ###-###-#### format.
 */
function normalizePhoneNumbers() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var activeRange = activeSheet.getActiveRange();
  var selectedCells = activeRange.getValues();

  var phoneNumber = "";

  for (var i = 0; i < selectedCells.length; i++) {
    for (var j = 0; j < selectedCells[i].length; j++) {
      phoneNumber = selectedCells[i][j]; // for better readability

      if (phoneNumber) {
        phoneNumber = phoneNumber.replace(/[^\d]/g, ""); // remove all non-digit characters from phone number
      } else {
        continue;
      }

      if (phoneNumber.length === 10) {
        phoneNumber = phoneNumber.slice(0, 3) + '-' + phoneNumber.slice(3, 6) + '-' + phoneNumber.slice(6, 10); 
      } else {
        continue;
      }

      selectedCells[i][j] = phoneNumber;
    }
  }

  activeRange.setValues(selectedCells);
};

当我选择一行或一列或一组单元格时,这是有效的,但只有在我控制选择的细胞散布在电子表格周围时,才会更改其中一项。是否可以在非连续选择中更改多个单元格?如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:0)

你想要做的事情是不可能的。例如,activerange.setValues()需要一个2D数组(比如Range.getValues()返回的内容)。在任何一种情况下,你的函数只能得到一个矩形的数据数组,而不是一组不相交的单元格,如果你调用getValues()

但是,如果您可以处理这是一个在电子表格中调用的自定义函数(使用类似=NORMALIZEPHONENUMBERS的内容),那么您可以使用map()下所示的{{1}}自定义函数文档。