Получение списка дат из столбца и форматирование его в MM / dd / yyyy - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь написать программу, которая будет применяться только к строкам, даты которых соответствуют текущему дню. Я знаю, как отформатировать текущую дату в MM / dd / yyyy, но у меня возникают проблемы с циклическим просмотром моего списка и форматированием дат в списке, который я буду использовать для сравнения. Любой совет помогает, спасибо!

function date() {
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "M/dd/yyyy")
  console.log(curDate)

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
  var columnF = sheet.getRange(2, 5, sheet.getLastRow() - 1, 1); // get all the rows

  var fValues = columnF.getValues(); // get the values
  console.log('fvalues are; ', fValues)
  var format = []
  var datecolumn = sheet.getRange(2, 5, sheet.getLastRow() - 1, 1)

  for (var i = 2; i < 4; i++) {
    var datecolumn = sheet.getRange(i, 5).getValue();
    format.push(datecolumn)
  };
  console.log('date array is: ', format)

  var format2 = []
  for (var i = 0; i < fValues.length; i++) {

    var fmtcell = Utilities.formatDate(fValues, "GMT-5", "MM/dd/yyyy")

    format2.push(fmtcell)
  }
}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020
function formatDate() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var dt=new Date();
  var dtv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valufOf();
  var colfR=sh.getRange(2,5,sh.getLastRow()-1,1);
  var colfV=colfR.getValues(); 
  var colfF=colfR.getNumberFormats();
  for (var i=0;i<colfV.length;i++) {
    var dtf=new Date(colfV[i][0]);
    var dtfv=new Date(dtf.getFullYear(),dtf.getMonth(),dtf.getDate()).valueOf();
    if(dtfv===dtv){colfF[i][0]="MM/dd/yyyy";}
  }
  colfR.setNumberFormats(colfF)
}
0 голосов
/ 18 февраля 2020

Если я правильно вас понимаю, вы хотите сравнить группу дат, расположенную в столбце E с Sheet1, с текущей датой, а также отформатировать эти даты в определенном формате.

Если это так, вы можете сделать следующее (проверьте встроенные комментарии):

function dateCompare() {
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "MM/dd/yyyy");
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  // Retrieve list of dates in column E (formatted as current date):
  var firstRow = 2;
  var column = 5;
  var numRows = sheet.getLastRow() - firstRow + 1;
  var dates = sheet.getRange(firstRow, column, numRows).getValues().map(function(date) {
    return Utilities.formatDate(new Date(date[0]), "GMT+1", "MM/dd/yyyy");
  });
  dates.forEach(function(date, i) { // Iterate through each date in column E
    if (date === curDate) { // Compare each date in column E to current date
      // Do something to the row:
      var row = sheet.getRange(firstRow + i, 1, 1, sheet.getLastColumn());
    }
  });
}

Обратите внимание, что getValues ​​() возвращает двумерный размерный массив. Вы можете преобразовать это 2D в одномерный массив и одновременно отформатировать даты в массиве с помощью map .

Ссылка:

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