Как получить значения ячеек Google, используя скрипт Google - PullRequest
0 голосов
/ 31 января 2019

Я собираюсь использовать Google лист в качестве базы данных для моего небольшого проекта приложения для Android.Я использую Google Script для обработки запроса из моего приложения.

В своем листе Google я храню;

  • A2: A = дата в виде дд / мм /гггг например 21/12/2019, но формат отображения дд-МММ, например, 21 декабря

  • C2: D = время в формате чч: мм: сс, например, 21:00:00, ноформат отображения: чч: мм, например, 21: 00

Да, мне нужен другой формат для отображения и ввода.

Мой лист Google:

enter image description here

Когда я использую скрипт Google, чтобы получить значение ячейки, кажется, что она переформатирована

дата выглядит так: Sat Jan 01 2019 00:00:00 GMT+0700 (ICT)время, с другой стороны, немного изменить значение.20:00:00 до 19: 52: 48

Существует ли какая-либо функция для получения реальных значений ячеек в виде текста без переформатирования?

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

Фрагмент моего кода:

function updateData(e, sheet) {
  var tgl = e.parameter.tgl;
  var dtg = e.parameter.dtg;
  var plg = e.parameter.plg;
  var lbr = e.parameter.lbr;

  var rangeHead = sheet.getRange("A2:A");
  var valuesHead = rangeHead.getValues();

  var rangeFirst = sheet.getRange("C2:D")
  var valuesFirst = rangeFirst.getValues();

  var rangeSecond = sheet.getRange("G2:G")
  var valuesSecond = rangeSecond.getValues();

  for (var i = 0; i < valuesHead.length; i++) {
    if (valuesHead[i][0] === tgl) {
      if(dtg!="null") { valuesFirst[i][0] = dtg; }
      if(plg!="null") { valuesFirst[i][1] = plg; }
      if(lbr!="null") { valuesSecond[i][0] = lbr; }
      break;
    }
  }
  rangeFirst.setValues(valuesFirst);
  rangeSecond.setValues(valuesSecond);
}

Код не будет работатькак я буду сравнивать 21/12/2019 с Sat Jan 01 2019 00:00:00 GMT+0700 (GMT).

[ОБНОВЛЕНИЕ 1]: Спасибо, П-Берк, за просветление.Теперь у меня есть идея решить проблему с датой.Я знаю, что сценарий извлекает дату как объект даты, но я не знаю, что он также сохраняет как объект даты.(хе-хе, мой плохой) Я не понимаю этого, так как нет автозаполнения, когда я вызываю значения [0] [0].конечно, поскольку он распознает тип объекта во время выполнения.

Итак, мой обходной путь будет;Я позвоню getDate, getMonth + 1 и getYear.После этого я буду свободно сравнивать со своим параметром.

Хотя временная ячейка все еще немного сбивает меня с толку.смещение по времени составляет 18 минут 12 секунд.Я не думаю, что это из-за разного часового пояса и моих компьютерных часов.другой часовой пояс слишком велик, и я позаботился о том, чтобы сценарий, электронная таблица и местный часовой пояс были одинаковыми.Мои компьютерные часы также отстают на одну минуту меньше.

[ОБНОВЛЕНИЕ 2]: Хорошо, достаточно путаницы.Казалось, что сценарий преобразует время в дату объекта относительно моего местного часового пояса.Я получил этот ответ из другой ветки.Так что, на самом деле, мой местный часовой пояс много раз менялся, и некоторые из них смещались меньше часовых единиц (один из часовых поясов, используемых в моей области, - это UTC +7: 07: 12h).Единственный источник, документирующий те изменения, которые я смог найти, - https://www.timeanddate.com/time/zone/indonesia/jakarta. Наконец, я сдался.Ради всего святого, я просто использую getDisplayValue и игнорирую секунды.Если у вас нет другого обходного пути, я буду очень благодарен.

Еще раз спасибо сообществу.

1 Ответ

0 голосов
/ 31 января 2019

Во-первых, и я не знаю, связано ли это с вашей проблемой, но у электронной таблицы и сценария есть свои собственные настройки часового пояса: Электронная таблица: File >> Spreadsheet Settings >> Time Zone.Script: File >> Project Properties >> Time Zone.И если они отличаются, это может привести к путанице.Один из ответов, если все ваши пользователи находятся в одном часовом поясе, состоит в том, чтобы установить для них одинаковые значения.В качестве альтернативы они могут быть определены в вашем скрипте, как описано здесь , и включена логика для обработки любых различий.Я не понимаю разницу во времени в несколько минут, возможно, ваши часы на компьютере неточны?

Другой момент, который, на мой взгляд, более актуален для вашего вопроса, заключается в том, что вы эффективно используете несколько форматов даты / времени.На рисунке ниже показано, что время в электронной таблице редактируется в одном формате (01/01/2019 09:00:00), но отображается в любом формате, заданном для ячейки с помощью меню форматирования.Тем не менее, когда значения ячеек извлекаются в скрипт с использованием getValues ​​() и отображаются, они выглядят следующим образом: Values: [[Thu Jan 31 09:00:00 GMT+00:00 2019, Wed Jan 02 09:00:00 GMT+00:00 2019]].

enter image description here

Еще в кодениже values[0][0] и values[0][1] на самом деле являются объектами JavaScript Date() и могут сравниваться обычным способом, или же они могут быть переформатированы в любой формат строки, который вам требуется, как показано в приведенном ниже коде:

function myFunction() {
    var ss = SpreadsheetApp.getActive();
    var ws = ss.getActiveSheet();
    var input_range = ws.getRange("A1:B1");
    var values = [];
    values = input_range.getValues(); // Returns a multi-dimensional array, hence [0][0] to access.
    Logger.log("Values: %s", values);

    // As Date() objects the usual methods are available.
    Logger.log("Date().getMonth(): %s",values[0][0].getMonth());
    Logger.log("Date().getYear(): %s",values[0][1].getYear());

    // This formats the date as Greenwich Mean Time in the format
    // year-month-dateThour-minute-second.
    var formattedDate = Utilities.formatDate(values[0][0], "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
    Logger.log(formattedDate);
    formattedDate = Utilities.formatDate(values[0][1], "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
    Logger.log(formattedDate);
}

Logger.log output:    
[19-01-31 11:43:17:635 GMT] Values: [[Thu Jan 31 09:00:00 GMT+00:00 2019, Wed Jan 02 09:00:00 GMT+00:00 2019]]
[19-01-31 11:43:17:636 GMT] Date().getMonth(): 0.0
[19-01-31 11:43:17:637 GMT] Date().getYear(): 2019.0
[19-01-31 11:43:17:638 GMT] 2019-01-31T09:00:00Z
[19-01-31 11:43:17:638 GMT] 2019-01-02T09:00:00Z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...