Google apps script 如何循环通过不同的控制选定的单元格?
我正在编写一个脚本,用于规范谷歌电子表格中选定的电话号码:Google apps script 如何循环通过不同的控制选定的单元格?,google-apps-script,Google Apps Script,我正在编写一个脚本,用于规范谷歌电子表格中选定的电话号码: /** * Normalizes phone numbers to ###-###-#### format. */ function normalizePhoneNumbers() { var activeSheet = SpreadsheetApp.getActiveSheet(); var activeRange = activeSheet.getActiveRange(); var selectedCells =
/**
* 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);
};
当我选择一行、一列或一个单元格块时,这会起作用,但如果我控制散布在电子表格中的“选择单元格”,则只会更改其中一项。是否可以更改非连续选择中的多个单元格?如果是这样的话,我做错了什么?你想做的事情并不完全可能。例如,activerange.setValues需要一个2D数组,就像Range.getValues返回的数组一样。在这两种情况下,调用getValues时,函数只能获取单个矩形数据数组,而不能获取不相交的单元格集
但是,如果您可以将其设置为自定义函数,并在电子表格中使用类似于=NORMALIZEPHONENUMBERS的内容调用该函数,则可以使用map,如自定义函数文档中所示 实际上,我是从自定义函数的方法开始的,但后来我意识到我必须在一个手机中调用函数,但要引用另一个手机的电话号码:-p。我只是想让数字规范化,这就是为什么我不再使用自定义函数的原因。也许处理这个问题的明智方法是突出显示包含要格式化的电话号码的整个区域,并有一个regexp,它可以逐个手机决定是否有一个它知道如何更改的号码。耶,我想这就是我的代码现在要做的,除非你看到我遗漏了什么。因此,让控件选定的单元格工作并不是必需的,这会很好:-p。您的代码正在调用getActiveRange。据我所知,该函数只返回单个矩形范围,通常是您最后编辑或选择的矩形范围。所以我有点困惑——如果我是对的,那么这个调用除了你控制的最后一个选择范围之外不会包含任何内容。如果我错了,那么您的原始代码应该按照您在文章中描述的那样执行。