Почему некоторые значения распознаются как дата? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть скрипт для замены точек запятыми в одном столбце в Google Sheets. In my case its column B

function checkItNow(){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('TESTSCRIPTS');
  let rangeReplace = sheet.getRange(1, 2, sheet.getLastRow());
  let valsReplace = rangeReplace.getValues().map(a => a[0]);  
  let newVals = valsReplace.map(dots => dots.toString().replace('\.', '\,'));
  let newValsArr = [];
      for (i = 0; i < newVals.length; i++) {
      newValsArr.push([newVals[i]]);
      };
  Logger.log(newVals)
  Logger.log(newValsArr)
  sheet.getRange(1, 2, sheet.getLastRow()).setValues(newValsArr);

}; 

Иногда после запуска скрипта я получаю даты In this case most values replaced correct but several was recognized as dates

Почему это произошло? Где я не прав? И как это исправить?

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Я нашел более простое решение .setNumberFormat из Google Apps Script

function checkItNow(){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('TESTSCRIPTS');
  let rangeReplace = sheet.getRange(1, 2, sheet.getLastRow());
  rangeReplace.setNumberFormat('#,##.000');
  let valsReplace = rangeReplace.getValues().map(a => a[0]);  
  let newVals = valsReplace.map(dots => dots.toString().replace('\.', '\,'));
  let newValsArr = [];
      for (i = 0; i < newVals.length; i++) {
      newValsArr.push([newVals[i]]);
      };
  Logger.log(newVals)
  Logger.log(newValsArr)
  sheet.getRange(1, 2, sheet.getLastRow()).setValues(newValsArr);

}; 
0 голосов
/ 28 марта 2020

Формат по умолчанию - автоматический c, что означает, что электронная таблица пытается выяснить, какой формат для вас. Но да, ваше право, иногда он получает неправильный ответ. Я часто использую функцию ниже, чтобы взглянуть на форматы активного диапазона, чтобы я мог выяснить, каков текущий формат числа. Функция также позволяет вам устанавливать новые числовые форматы, если вы используете sh. Чтобы использовать все, что вам нужно сделать, это выбрать диапазон ячеек, для которых вы sh будете просматривать форматы. Примечание: он не обрабатывает несмежные выборки ячеек. Это оставлено в качестве упражнения для читателя.

function getandSetActiveRangeFormats() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  var fA=rg.getNumberFormats();
  var html='<style>th,td{border:1px solid black;}</style><table><tr><th>Item</th><th>A1 Notation</th><th>Number Format</th><th>Enter Format</th><th>Set Format</th></tr>';
  var item=1;
  var row=rg.getRow();
  var col=rg.getColumn();
  fA.forEach(function(r,i){
    r.forEach(function(c,j){
      var txt=Utilities.formatString('<input type="text" id="RC-%s-%s" />',row+i,col+j);
      var btn=Utilities.formatString('<input type="button" value="Set Form" onClick="setFormat(%s,%s);" />',row+i,col+j);
      html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',item++,sh.getRange(row + i,col + j).getA1Notation(),fA[i][j],txt,btn);
    });
  });
  html+='</table><input type="button" value="Exit" onClick="google.script.host.close();" />';
  html+='<script>function setFormat(row,col){var f=document.getElementById("RC-"+row+"-"+col).value;google.script.run.setFormat(row,col,f);}</script>';
  var ui=HtmlService.createHtmlOutput(Utilities.formatString(html));
  SpreadsheetApp.getUi().showModelessDialog(ui, "Display and Set Active Range Formats")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...