В Google Apps Script моя дата переключается с обычного формата на что-то вроде идентификатора - PullRequest
2 голосов
/ 02 октября 2019

Я использую скрипт приложений Google для листа Google, который предназначен для сортировки диапазонов ячеек по разным листам по дате. Я ввел дату в ячейку A2, а затем, когда я использую свою функцию, она сортирует лист с той же датой, что и в A2, и, если ее нет, создается новый лист с этой датой. свидание. Проблема, с которой я сталкиваюсь, не в том, что ячейки попадают в нужное место, а по какой-то причине дата меняется на нечто вроде идентификатора. Например, для даты 01.01.2001 первая пара работала нормально, а затем для следующих попыток пары она переключилась на «36892», где должна быть дата.

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

function findDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  ss.setActiveSheet(ss.getSheets()[0])
  var range = sheet.getRange("A2");
  var A2 = SpreadsheetApp.getActiveSheet().getRange('A2').getValue();
  var templateSheet = ss.getActiveSheet();  
  var val = Utilities.formatDate(new Date(A2), "GMT+1", "MM/dd/yyyy");
  range.setValue(new Date(A2)).setNumberFormat("MM/dd/yyyy");
  A2 = SpreadsheetApp.getActiveSheet().getRange('A2').getValue();
  if( ss.getSheetByName(val) == null)
  {
    //if returned null means the sheet doesn't exist, so create it
    ss.insertSheet(val, ss.getSheets().length, {template: templateSheet});
  }
  else
  {
    var sheet1 = ss.getSheetByName("GUI");
    var sheet2 = ss.getSheetByName(val);
    sheet1.getRange("A2:D2").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,1,4), {contentsOnly:true});
  }
    ss.setActiveSheet(ss.getSheets()[0]);
    sheet.getRange("A2:D2").clearContent();
}

Это моя функция. Так как я не знаю, в чем проблема, я скопировал все это, извините за объем.

Date       Event    Time            Comments
01/01/2001 Movie    22:00           a
01/01/2001 Movie    11:00 PM        a
36892      Movie    0.7083333333    a
36892      Movie    12:00 PM        a

Это было результатом добавления одной и той же даты каждый раз и сортировки их на правильный листиспользуя функцию. Время странное, я действительно понятия не имею, почему, но мне сейчас все равно, это проблема будущего (если никто не знает, почему она тоже меняет формат). Дата, однако, не кажется случайным числом, поскольку та же самая дата дала вывод того же самого числа. Я бы ожидал, что это будет выглядеть так:

Date       Event    Time            Comments
01/01/2001 Movie    10:00 PM        a
01/01/2001 Movie    11:00 PM        a
01/01/2001 Movie    (I forget)      a
01/01/2001 Movie    12:00 PM        a

1 Ответ

2 голосов
/ 02 октября 2019

Ответ:

Вам необходимо удалить {contentsOnly:true} из вашего copyTo() метода.

Причины:

Установив contentsOnly boolean to true, вы говорите листам скопировать то, что оно видит в ячейке, а не то, что вы видите.

В Sheets все дни сериализуются, начиная с 1 st. Январь 1900 года с днем ​​1, поэтому копирование 01/01/2001 - это день с серийным номером 36892.

Что касается даты - она ​​читается как часть того, как далеко через день она находится- в 17:00h и с 24 часами в день, дата будет выглядеть как 17/24 или 0.708333333333.

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