Как предотвратить превращение даты в строку при использовании скрипта Google Apps в Google Sheets? - PullRequest
1 голос
/ 04 октября 2019

Я использовал скрипт, размещенный здесь в большой таблице Google, чтобы заменить строку на число.

Отлично работает, но проблема в том, что дата превращается в строку .

Я считаю, что проблема в методе toString(), но я не смог найти альтернативы, чтобы заставить код работать.

=> У кого-нибудь есть идеи, чтобы избежать этой проблемы?

Сценарий

function runReplaceInSheet(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
  //  get the current data range values as an array
  //  Fewer calls to access the sheet -> lower overhead 
  var values = sheet.getDataRange().getValues();  

  // Replace  
  replaceInSheet(values, 'datateam', '42007860');

  
  // Write all updated values to the sheet, at once
  sheet.getDataRange().setValues(values);
}

function replaceInSheet(values, to_replace, replace_with) {
  //loop over the rows in the array
  for(var row in values){
    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value) {
      return original_value.toString().replace(to_replace,replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;
  }
}

До

enter image description here

После

enter image description here

Ответы [ 2 ]

3 голосов
/ 05 октября 2019
  • Вы хотите заменить значения таблицы.
    • В вашем скрипте вы хотите заменить с datateam на 42007860.
  • . Вы хотите добиться этого с помощью скрипта Google Apps.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Шаблон 1:

В этом шаблоне вместо getValues().

Модифицированный скрипт * используется getDisplayValues(). 1021 * Пожалуйста, измените ваш скрипт следующим образом. В этой модификации изменена функция runReplaceInSheet(). function runReplaceInSheet(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3"); // get the current data range values as an array // Fewer calls to access the sheet -> lower overhead var values = sheet.getDataRange().getDisplayValues(); // Modified // Replace replaceInSheet(values, 'datateam', '42007860'); // Write all updated values to the sheet, at once sheet.getDataRange().setValues(values); } Pattern 2: В этом шаблоне TextFinder используется вместо replaceInSheet() и setValues(). Модифицированный скрипт

Пожалуйста, измените ваш скрипт следующим образом. В этой модификации функция runReplaceInSheet() изменена. А также, в этой модификации replaceInSheet не используется.

function runReplaceInSheet(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
  sheet.createTextFinder('datateam').replaceAllWith('42007860'); // Added
}

Ссылки:

Если я неправильно понял ваш вопрос, и это не то направление, в котором вы хотите, я приношу свои извинения.

0 голосов
/ 04 октября 2019

Я бы проверил шаблон, ваш настоящий файл XLS. Установите тип ячеек перед вводом данных. Я предполагаю, что это может быть вашей проблемой, а не вашим настоящим кодом. Это на главной вкладке.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...