2014-11-03 27 views
2

我写一个脚本,将在谷歌电子表格规范化选定号码:如何通过不同的控制选择单元循环?

/** 
* 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

你想要做的不是完全可能的。例如,activerange.setValues()需要一个单一的二维数组(如Range.getValues()返回的内容)。在这两种情况下,你的函数只能得到一个单一的矩形数据阵列,而不是一组不相交的单元格,如果你叫getValues()。但是,如果您可以处理使其成为在电子表格中调用的自定义函数(使用类似=NORMALIZEPHONENUMBERS的东西),那么您可以使用map(),如在自定义函数文档中的Optimization中所演示的。

+0

我实际上是通过自定义函数方法开始的,但后来我意识到我将不得不在一个单元中调用该函数,而是从另一个单元格引用电话号码:-p。我只是想让这些数字正常化,所以这就是为什么我改变了自定义函数的原因。 – user4212284 2014-11-04 08:13:49

+0

也许一个理智的方式来处理这个问题,然后,将会突出显示包含您要格式化的电话号码的**整个**区域,并且有一个正则表达式,它将逐个单元格地确定是否存在它知道如何改变的数字。 – jjjjoe 2014-11-04 15:26:06

+0

雅,我认为这就是我的代码现在试图做的,除非你看到我失踪的东西。所以我得到控制选择的单元并不是必须的,它只是会很好:-p。 – user4212284 2014-11-04 20:13:55

相关问题