我正在编写一个脚本,可以在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);
};
当我选择一行或一列或一组单元格时,这是有效的,但只有在我控制选择的细胞散布在电子表格周围时,才会更改其中一项。是否可以在非连续选择中更改多个单元格?如果是这样,我做错了什么?
答案 0 :(得分:0)
你想要做的事情是不可能的。例如,activerange.setValues()
需要一个2D数组(比如Range.getValues()
返回的内容)。在任何一种情况下,你的函数只能得到一个矩形的数据数组,而不是一组不相交的单元格,如果你调用getValues()
。
但是,如果您可以处理这是一个在电子表格中调用的自定义函数(使用类似=NORMALIZEPHONENUMBERS
的内容),那么您可以使用map()
下所示的{{1}}自定义函数文档。