Очистка форматов в Google Sheets

У меня есть Microsoft Flow, отправляющий данные в Google Sheet. Когда данные появляются на листе, у некоторых ячеек есть скрытый апостроф, который предотвращает вычисления и некоторую формулу.

У меня есть скрипт, который форматирует ячейки с номером, чтобы я мог выполнять вычисления. Что я не могу сделать, так это очистить апостроф от ячейки, которую я хочу запустить =NOW(), чтобы я мог создать метку времени.

Я создал скрипт, но не могу понять, как заставить эту ячейку делать то, что я хочу.

function setFormat(){SpreadsheetApp.getActiveSheet().getRange("A2:A").getValue().replace("'=NOW()","=NOW()");SpreadsheetApp.getActiveSheet().getRange("C2:C").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("D2:D").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("E2:E").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("F2:F").setNumberFormat('000');}`

формат в ячейке

1 ответ

Решение

Как насчет этого образца?

  1. С помощью getValues()данные "A2:A" извлекаются. https://developers.google.com/apps-script/reference/spreadsheet/range

  2. Данные, полученные в 1, преобразуются из '=NOW() в =NOW(),

  3. С помощью setFormulas(), преобразованные данные импортируются в "A2:A". https://developers.google.com/apps-script/reference/spreadsheet/range

  4. setNumberFormat() отлично работает для вашего сценария.

Пример скрипта:

function setFormat(){
  var ss = SpreadsheetApp.getActiveSheet();
  var Data = ss.getRange("A2:A").getValues();
  var replacedData = [[i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])];
  ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData);

  ss.getRange("C2:C").setNumberFormat('000');
  ss.getRange("D2:D").setNumberFormat('000');
  ss.getRange("E2:E").setNumberFormat('000');
  ss.getRange("F2:F").setNumberFormat('000');
}

Если я неправильно понимаю ваш вопрос, извините.

Добавлено 1:

Тип =NOW() как формула является объектом. Так только '=NOW() как строка преобразуется в формулу =NOW() сравнивая тип. Когда вы добавляете больше данных, добавленные данные будут преобразованы.

function setFormat(){
  var ss = SpreadsheetApp.getActiveSheet();
  var Data = ss.getRange("A2:A").getValues();
  var replacedData = [typeof(i[0])=="object" ? ["=NOW()"] : [i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])];
  ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData);

  ss.getRange("C2:C").setNumberFormat('000');
  ss.getRange("D2:D").setNumberFormat('000');
  ss.getRange("E2:E").setNumberFormat('000');
  ss.getRange("F2:F").setNumberFormat('000');
}

Добавлено 2:

Этот образец импортирует объект даты в виде строки, когда были импортированы новые данные.

function setFormat(){
  var ss = SpreadsheetApp.getActiveSheet();
  var Data = ss.getRange("A2:A").getValues();
  var replacedData = [
      typeof(i[0])=="object"
      ? [i[0]]
      : [i[0].replace("=NOW()", Utilities.formatDate(
        new Date(),
        Session.getScriptTimeZone(),
        'yyyy/M/d HH:mm:ss')
      )
    ]
    for each (i in Data) if(i[0])
  ];
  ss.getRange(2, 1, replacedData.length, replacedData[0].length).setValues(replacedData);

  ss.getRange("C2:C").setNumberFormat('000');
  ss.getRange("D2:D").setNumberFormat('000');
  ss.getRange("E2:E").setNumberFormat('000');
  ss.getRange("F2:F").setNumberFormat('000');
}
Другие вопросы по тегам