Изменение даты в Документах Google - PullRequest
3 голосов
/ 24 января 2011

enter image description here

У меня есть три сценария, которые находятся в электронной таблице Google. В этой электронной таблице, в column H (или column 8), если я наберу x, сценарий изменит его на дату того дня.

Через несколько дней каждая дата в column H изменилась с даты до числа . Числа выглядят так: 40492, 40494, 40511.

Я не уверен, что является причиной этого. Может быть, это что-то не так в моем сценарии. Я вставил их ниже. Есть идеи?

Вот первый:

function onEdit(e) {

  var colorA = "yellow";
  var colorB = "#dddddd";
  var colorC = "#dddddd";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Purchase Orders");
  var range = e.source.getActiveRange();
  var sheetName = SpreadsheetApp.getActiveSheet().getName();

  if (sheetName == "Purchase Orders") {

 // 3 is column C
    if (range.getColumn() == 7 && range.getValue() != "") {
      var r = range.getRow() + 1;
      sheet.getRange("A" + r + ":G" + r).setBackgroundColor(colorC);
    }
  }

    var col = e.source.getActiveRange().getColumn();
    if(col == 8 || col == 7) {
    var rows = sheet.getMaxRows();

    //column C
    var rangeC = sheet.getRange("H1:H"+rows);
    var valuesC = rangeC.getValues();
    //column H range
    var rangeH = sheet.getRange("G1:G"+rows);
    var colorH = rangeH.getBackgroundColors();
    var valuesH = rangeH.getValues();

    //iterate over each row in column C and H
    //then change color
        for (var row = 0; row < valuesC.length; row++) {
          //check for columnC and column H
          var hRow = colorH[row];
          if (valuesC[row][0] != "" && valuesH[row][0] == "") {
            hRow[0] = colorA;
          } else if (valuesH[row][0] != "") {
            hRow[0] = colorB;
      }
        }
    sheet.getRange("G1:G" + rows).setBackgroundColors(colorH);




}
  }

Вот второй:

function onEdit(e) {

  var colorA = "yellow";
  var colorB = "#dddddd";
  var colorC = "#dddddd";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Purchase Orders");
  var range = e.source.getActiveRange();
  var sheetName = SpreadsheetApp.getActiveSheet().getName();

  if (sheetName == "Purchase Orders") {

 // 3 is column C
    if (range.getColumn() == 3 && range.getValue() != "") {
      sheet.insertRowAfter(range.getRow());
      var r = range.getRow() + 1;
      sheet.getRange("A" + r + ":H" + r).setBackgroundColor(colorC);
    }
  }

    var col = e.source.getActiveRange().getColumn();
    if(col == 3 || col == 8) {
    var rows = sheet.getMaxRows();

    //column C
    var rangeC = sheet.getRange("C1:C"+rows);
    var valuesC = rangeC.getValues();
    //column H range
    var rangeH = sheet.getRange("H1:H"+rows);
    var colorH = rangeH.getBackgroundColors();
    var valuesH = rangeH.getValues();

    //iterate over each row in column C and H
    //then change color
        for (var row = 0; row < valuesC.length; row++) {
          //check for columnC and column H
          var hRow = colorH[row];
          if (valuesC[row][0] != "" && valuesH[row][0] == "") {
            hRow[0] = colorA;
          } else if (valuesH[row][0] != "") {
            hRow[0] = colorB;
      }
        }
    sheet.getRange("H1:H" + rows).setBackgroundColors(colorH);




}
  }

Вот третий:

function onEdit(e) {
  var ss = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
   //1 is A, 2 is B, ... 8 is H
  if (r.getColumn() == 8 && r.getValue() == "x") {
    r.setNumberFormat("MM/dd/yyyy")
    r.setValue(Utilities.formatDate(new Date(), "MST", "yyyy-MM-dd"));

  }  
}  

Ответы [ 3 ]

0 голосов
/ 29 декабря 2011

Следуя сказанному Schroedinger, попробуйте привести числовой формат к формату даты

Выберите диапазон ячеек, которые вы хотите изменить:

Ex. H24:H28

В раскрывающемся меню выберите Формат-> Number, а затем формат даты, который вы хотите использовать.Это может или не может работать.

Если это не имеет значения, вам нужно преобразовать целочисленное значение в коде сценария в явный формат даты (преобразование могло происходить неявно раньше).

Если вы не знаете, как приводить типы в JavaScript, стоит поискать или открыть новый вопрос на этом сайте.

0 голосов
/ 18 января 2013

В моей локали (великобритании) на клавиатуре ПК набираю Ctrl +;(Ctrl с точкой с запятой) сегодняшняя дата будет вставлена ​​в выбранную ячейку (в столбце H).Вы можете попробовать это вместо третьего сценария.

Если вы выберете столбец H и выберете в меню «Формат»> «Число»> «Обычный», дата будет отображаться как число (как указано в Schroedingers Cat).И наоборот, выбрав «Формат»> «Число»> «Дата», вы вернете все числа в формат даты, соответствующий текущим настройкам электронной таблицы.

0 голосов
/ 29 июня 2011

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

Причина в том, что именно так оно и хранится, и вы не говорите ячейкам интерпретировать это число какdate, так что это не так.

Мой сценарий Excel не совсем подходит для предоставления вам кода, но если вы убедитесь, что вы форматируете столбец явно для отображения дат, то у вас все будет в порядке.Причина, по которой он изначально выглядит нормально, заключается в том, что когда вы добавляете дату, она видит ее как дату, но если она не сохранена в определенном формате, она снова откроется со значением по умолчанию.

HTH

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