Дата последнего изменения в таблицах GAS Google Script - PullRequest
0 голосов
/ 04 марта 2019

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

Моя текущая идея состоит в том, чтобы получить список версий Drive и затем принять последнее значение.Кажется, это немного излишне просто для получения последней модификации, я также беспокоюсь, что это сломается, если количество ревизий превысит 1000, как предполагает эта ссылка.

https://developers.google.com/drive/api/v3/reference/revisions/list

В идеале яхотел бы знать диапазон, который тоже изменился, но я не думаю, что это возможно.

Я не могу использовать событие onEdit, потому что я хотел бы отслеживать изменения, сделанные пользователями, которые не установили надстройку-on.

  var fileId = SpreadsheetApp.getActiveSpreadsheet().getId();
  var revisions = Drive.Revisions.list(fileId);
  var revisionLength = revisions.items.length;

  if(revisionLength > 0){
    var revision = revisions.items[revisionLength-1];
    var date = new Date(revision.modifiedDate);
    Logger.log(date.toString());
  }

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я полагаю, что вы можете сделать это следующим образом

var lastUpdated = DriveApp.getFileById(fileId).getLastUpdated();

См. Функцию ссылка

0 голосов
/ 04 марта 2019

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

В сторону: к вашей точке зрения более 1000 ревизий, если их больше 1000 (или любого размера вашей страницыis), вы получите nextPageToken примерно так:

{
 "kind": "drive#revisionList",
 "nextPageToken": "BHNMJKHJKHKVJHyugaiohasdzT1JyUmlQWG10RUJ1emx1S2xNDg4EgQzMzY1GAI=",
 "revisions": [
    ...
 ]
}

Если вы увидите, что вам нужно будет перечислить ревизии снова, предоставив этот токен.

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

{
 "kind": "drive#revision",
 "etag": "\"som3-e-tAg\"",
 "id": "3365",
 "selfLink": "https://www.googleapis.com/drive/v2/files/dummydummydummy/revisions/3365",
 "mimeType": "application/vnd.google-apps.spreadsheet",
 "modifiedDate": "2018-10-19T19:05:41.762Z",
 "published": false,
 "exportLinks": {
  "application/x-vnd.oasis.opendocument.spreadsheet": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=ods",
  "text/tab-separated-values": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=tsv",
  "application/pdf": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=pdf",
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=xlsx",
  "text/csv": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=csv",
  "application/zip": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=zip",
  "application/vnd.oasis.opendocument.spreadsheet": "https://docs.google.com/spreadsheets/export?id=dummydummydummy&revision=3365&exportFormat=ods"
 },
 "lastModifyingUserName": "Joe User",
 "lastModifyingUser": {
  "kind": "drive#user",
  "displayName": "Joe User",
  "picture": {
   "url": "https://lh3.googleusercontent.com/-asdfsadf/AAAAAAAAAAI/AAAAAAAAFOk/OIPUYOIUGO/s64/photo.jpg"
  },
  "isAuthenticatedUser": true,
  "permissionId": "123456789",
  "emailAddress": "user@gmail.com"
 }
}

Если ваши данные не слишком сложны или велики, вы можете получить целевую ссылку экспорта 101 * * для ревизий, которые вы хотите сравнитьи затем выполните это сравнение в скрипте приложений.

Это может выглядеть примерно так:

var fileId = SpreadsheetApp.getActiveSpreadsheet().getId();
var revisions = Drive.Revisions.list(fileId);
var revisionLength = revisions.items.length;

if(revisionLength > 1) {  // something to compare!
  var revision = revisions.items[revisionLength-1];
  var newContent = UrlFetchApp.fetch(revision.exportLinks["text/csv"]).getContent();
  newContent = Utilities.parseCsv(newContent);

  var oldRevision = revisions.items[revisionLength-2];
  var oldContent = UrlFetchApp.fetch(oldRevision.exportLinks["text/csv"]).getContent();
  oldContent = Utilities.parseCsv(oldContent);

  # TODO check they're the same size!

  # where do they differ?
  for (var row = 0; row < newContent.length; row++) {
    for (var col = 0; col < newContent[0].length; col++) {
      if (newContent[row][col] != oldContent[row][col]) {
        Logger.log('Change on row ' + (row + 1) + ' column ' + (col + 1));
      }
  }

  # when did it change?
  var date = new Date(revision.modifiedDate);
  Logger.log(date.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...