Google Sheets API: получить название вкладки, которая была последний раз отредактирована - PullRequest
0 голосов
/ 18 сентября 2018

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

У меня есть лист Google с несколькими вкладками, которые используются несколькими пользователями.Я могу определить, когда пользователь вносит изменения следующим образом:

def testChanges(self):
    response = self.service.revisions().list(fileId='some-file-id').execute()
    revs = response.get('revisions',[])
    if not len(revs):
        return
    revID = revs[-1].get('id')
    response = self.service.revisions().get(
                            fileId='some-file-id',
                            revisionId=revID,
                            fields='kind, id, modifiedTime, lastModifyingUser'
                            ).execute()

И я получаю ответ:

{
  "kind": "drive#revision",
  "id": "12",
  "modifiedTime": "2018-09-17T20:10:41.330Z",
  "lastModifyingUser": {
    "kind": "drive#user",
    "displayName": "USER NAME",
    "me": true,
    "permissionId": "08921584708523400585",
    "emailAddress": "email.address@gmail.com"
  }

Теперь мне нужно обработать вкладку, которую пользователь только что изменил.Как я могу понять это?Я проверил документацию на диск и API листов , но пока не повезло.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я не верю, что это поддерживается или возможно из REST API.Вам, вероятно, потребуется создать установленный триггер редактирования и использовать его для регистрации объекта события редактирования (например, размещение его по URL-адресу, добавление его в некоторую электронную таблицу "страж" и т. Д..).Вы можете объединить это с вашим текущим revisions методом, чтобы узнать, кто выполнил модификацию (поскольку личность пользователя, как правило, ограниченная информация, если вы не находитесь в том же домене GSuite).

Пример, который записывает данные вназначенная электронная таблица.

function installedEdit(e) {
  const edited = e.range,
        sheet = edited.getSheet();
  const row = [
    new Date(),         // Time of the edit
    e.source.getId(),   // id of the edited workbook.
    e.source.getName(),
    sheet.getName(),    // edited sheet name
    sheet.getSheetId(), // gridid for REST API
    edited.getA1Notation(),
    edited.oldValue !== undefined ? edited.oldValue : "",
    edited.value !== undefined ? edited.value : ""
  ];
  try { row.push(e.user.getEmail()); }
  catch (e) { row.push("Unknown User"); }
  // Log this row somehow
  SpreadsheetApp.openById("some spreadsheet id").getSheetByName("Edit log").appendRow(row);
}

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

0 голосов
/ 18 сентября 2018

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

Просто идея.

...