Как увеличить дату в скрипте Google Sheets? - PullRequest
0 голосов
/ 11 декабря 2019

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

  var range = sheet.getRange('I1'); 
  var date = range.getValues();
  var datetmp = new Date(date);
  datetmp = datetmp + 1;
  newcell.setValue(datetmp).setHorizontalAlignment("center");

I1 ячейка имеет дату 27/12 /2019. Результат, который я получаю: «Пт 27 декабря 2019 00:00:00 GMT + 0700 (ICT) 1». У меня есть поиск в Интернете, что код скрипта, как JSТак что я делаю это datetmp = datetmp + 1;, но, похоже, это не работает. Есть ли способ сделать это в GoogleSheets. Спасибо.

Ответы [ 2 ]

1 голос
/ 11 декабря 2019

Вместо добавления только 1, попробуйте добавить еще один день, например:

var date = new Date();
date.setDate(date.getDate()+1);
0 голосов
/ 12 декабря 2019

Это на самом деле то, с чем у меня было много проблем в прошлом, поэтому я немного поиграл с этим.

Вот код:

function onOpen() {
  SpreadsheetApp.getUi().createMenu("Date Tools")
  .addItem('Generate Spreadsheet', 'generateTheSpreadsheet')
  .addItem('Display Format of Active Range', 'displayFormatOfActiveRange')
  .addItem('Clear Format of Active Range', 'clearFormatOfActiveRange')
  .addItem('Set Format of Active Range', 'setFormatOfActiveRange')
  .addItem('Select Column Skip Header', 'jjeSUS1.selectColumnsSkipHeader')
  .addToUi();
}

function generateTheSpreadsheet() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var fA=[['','','','','']];
  var oA=[['Description','Code','Result as Number','Result as Date','Date().valueOf()']];
  oA.push(['','','#0.##########','M/d/yyyy','#']);
  fA.push(['','','','','']);
  if(sh.getLastRow()>1) {
    sh.getRange(1,1,sh.getLastRow(),fA[0].length).clearContent();
  }
  oA.push(['Today','new Date()',new Date(),new Date(),Number(new Date().valueOf()).toFixed(0)]);
  fA.push(['','','#0.##########','M/d/yyyy','#']);
  oA.push(['Tomorrow at Midnight','new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1)',new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1),new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1),Number(new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1)).toFixed(0)]);
  fA.push(['','','#0.##########','M/d/yyyy','#']);
  oA.push(['Yesterday at Midnight','new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1)',new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1),new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1),Number(new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1)).toFixed(0)]);
  fA.push(['','','#0.##########','M/d/yyyy','#']);
  oA.push(['Tomorrow same time setDate()','new Date().setDate(new Date().getDate()+1)',new Date().setDate(new Date().getDate()+1),new Date().setDate(new Date().getDate()+1),Number(new Date().setDate(new Date().getDate()+1).valueOf()).toFixed(0)]);
  fA.push(['','','#0.##########','M/d/yyyy','#']);
  oA.push(['Tomorrow same time','new Date(new Date().setDate(new Date().getDate()+1))',new Date(new Date().setDate(new Date().getDate()+1)),new Date(new Date().setDate(new Date().getDate()+1)),Number(new Date().setDate(new Date().getDate()+1).valueOf()).toFixed(0)]);
  fA.push(['','','#0.##########','M/d/yyyy','#']);
  sh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
  sh.getRange(1,1,fA.length,fA[0].length).setNumberFormats(fA);

}

function displayFormatOfActiveRange() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  var row=rg.getRow();
  var col=rg.getColumn();
  var fA=rg.getNumberFormats();
  var vA=rg.getValues();
  var html='<style>th,td{border:1px solid black;padding:2px 4px;}</style><table><tr><th>Row</th><th>Column</th><th>Value</th><th>Format</th></tr>';
  for(var i=0;i<vA.length;i++) {
    for(var j=0;j<vA[i].length;j++) {
      html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',row+i,col+j,vA[i][j],fA[i][j]);
    }
  }
  html+='</table>';
  var userInterface=HtmlService.createHtmlOutput(html).setWidth(600);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Values & Formats');
}

function clearFormatOfActiveRange() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  rg.setNumberFormat('');
}

function setFormatOfActiveRange() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  var fA=rg.getNumberFormats();
  var resp=SpreadsheetApp.getUi().prompt("Formats", fA[0][0], SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
    rg.setNumberFormat(resp.getResponseText());
  }
}

Вот как выглядит моя таблица:

Ссылка на таблицу

enter image description here

В столбце A приведено простое описание каждой строки.

В столбце B указан фактический код в столбце C, а в столбце D

В столбце C естьчисловой формат # 0. ##########

Столбец D имеет числовой формат M / d / гггг

В противном случае столбцы C и D совпадают.

Столбец E Результат метода Javascript Date (). ValueOf ()

Столбец F - это простая функция ячейки, которая добавляет 1 к значению в столбце D каждой строки

Столбцы G и H - это функция isDate () для столбцов C и D. Интересно отметить, что единственная разница между столбцами C и D заключается в форматировании, поэтому я предполагаю, что ISDATE () говорит вам больше о формате ячейки, чемкакой тип объекта находится внутри клетки.

Строка 4 была одним из других ответов на некоторое время, и вы можете видеть, что он возвращает tколичество миллисекунд, и поэтому электронная таблица не знает, что с этим делать. Когда он добавляет один к нему, как это делается в столбце F, он заканчивается простым увеличением количества миллисекунд на единицу.

Строка 5 использует тот же метод, что и в строке 4, но я пропускаю его через конструктор Date () одинбольше времени, и он возвращает хороший объект даты, который электронная таблица с радостью превращает в один из своих объектов Date, а в столбцах C и D он продолжает правильно отображать значения в виде числа в одном случае и даты в другом. Кроме того, кажется, что он хорошо работает с другими функциями электронных таблиц, как и в столбце F., генерируя дату следующих дней.

Надеюсь, это поможет вам. Я знаю, что научился немного, делая это. Если у вас есть дополнительные вопросы, пожалуйста, не стесняйтесь спрашивать.

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