Форматирование номера телефона на месте в ячейке листа - PullRequest
0 голосов
/ 17 апреля 2020

enter image description here

Я работаю с листами Google и хотел бы преобразовать номера телефонов США в формат:

1xxxyyyzzzz

например, 402-333 -4444 должен быть преобразован в 14023334444

У меня есть функция проверки скриптов приложений, которая делает это:

var numbers = 'INVALID' 

if ( parsed_body.hasOwnProperty('PHONE') ) {


  var phone = parsed_body['PHONE'].toString();
  Logger.log(parsed_body);

  numbers = phone.replace(/[^0-9]/g, "");
  var firstChar = numbers.charAt(0);
  if ( firstChar !== '1'){ numbers = '1'+ numbers}
  Logger.log(numbers);

  if ( numbers.length !== 11){ numbers = 'NOTELEVEN'};
}

parsed_body['PHONE']=numbers;

Я также задал этот вопрос Проверка телефонных номеров в указанном формате c Google Sheet формула и, очевидно, это можно сделать в виде формулы в соседнем столбце Однако в моем случае каждая строка создается запросом на публикацию листов Google из отправленной формы, и я хотел бы отформатировать номер телефона НА МЕСТЕ (ie в ячейке), чтобы он выглядел как 1aaabbb cccc. Возможно ли это?

но я бы хотел, чтобы лист сделал это. Это возможно?

1 Ответ

2 голосов
/ 18 апреля 2020
  • Для таблицы Google вы хотите преобразовать 402-333-4444 в 14023334444, добавив 1.
  • . Вы хотите добиться этого с помощью скрипта Google Apps.

Чтобы достичь вашей цели, я хотел бы предложить перезаписать преобразованные значения в ячейки.

Пример сценария:

В этом примере сценария предполагается, что значения помещены на клетки "D2: D". При запуске сценария ячейки "A2: A" перезаписываются преобразованными значениями.

function myFunction() {
  const sheetName = "Sheet1"; // Please set the sheet name.

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const range = sheet.getRange(2, 4, sheet.getLastRow() - 1, 1);  // Column "D"
  const values = range.getValues();
  const converted = values.map(([v]) => {
    if (/\d{3}-\d{3}-\d{4}/.test(v)) {
      let temp = v.replace(/-/g, "");
      console.log(v.charAt(0))
      const tempV = v.charAt(0) != 1 ? 1 + temp : temp;
      return [tempV.length == 11 ? tempV : v];
    }
    return [v];
  });
  range.setValues(converted);
}

Примечание:

  • Когда вы также хотите преобразовать 402 333 4444 до 14023334444, пожалуйста, измените следующим образом.

    • С

      if (/\d{3}-\d{3}-\d{4}/.test(v)) {
        let temp = v.replace(/-/g, "");
      
    • К

      if (/\d{3}-\d{3}-\d{4}|\d{3} \d{3} \d{4}/.test(v)) {
        let temp = v.replace(/-| /g, "");
      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...