Как включить и настроить логирование действий пользователей в Google Sheets?

У меня есть следующий код: <br/> <pre><code class="javascript">function logs(e) {
  const sheetName = "Логи"; 
  const logSheet = e.source.getSheetByName(sheetName);

  if (!logSheet) {
    e.source.insertSheet(sheetName);
  }

  const currentTime = new Date(); 
  const user = e.user || Session.getActiveUser().getEmail() || "Аноним"; 
  const editedSheet = e.range.getSheet().getName(); 
  const action = `${e.range.getA1Notation()}: ${e.oldValue || "пусто"} -&gt; ${e.value || "пусто"}`;

  logSheet.appendRow([currentTime, user, editedSheet, action]);
}</code></pre> <br/> <br/> Этот код, как предполагается, должен фиксировать действия всех пользователей в логах таблицы. Однако он показывает только мой адрес электронной почты (который замазан на скриншоте), а действия остальных пользователей отображаются как "Аноним". Как это исправить?
  • 11 декабря 2024 г. 5:43
Ответы на вопрос 2
Функция, которую вы используете для логирования действий пользователей в Google Sheets, действительно ограничена в своей возможности идентификации пользователей, поскольку Google Apps Script предоставляет доступ к информации о текущем пользователе в зависимости от настроек безопасности и уровня доступа к таблице.

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

Для того чтобы исправить эту ситуацию, убедитесь в следующем:

1. **Проверьте доступ к таблице**: Убедитесь, что пользователи, действия которых вы хотите отслеживать, имеют доступ к таблице и используются свои аккаунты Google, с которыми они зарегистрированы.

2. **Требования к разрешениям**: Убедитесь, что у вас есть соответствующие права доступа. Если у вас нет прав администратора, вы можете не иметь возможности видеть адреса электронной почты других пользователей.

3. **Используйте `Session.getActiveUser().getEmail()`**: Если пользователи имеют соответствующий доступ, вы можете использовать `Session.getActiveUser().getEmail()` для получения их адресов электронной почты.

Попробуйте заменить следующую строку в вашем коде:

```javascript
const user = e.user || Session.getActiveUser().getEmail() || "Аноним"; 
```

на эту:

```javascript
const user = (e.user) ? e.user : Session.getActiveUser().getEmail() || "Аноним";  
```

В идеале, если у вас правильно настроены права доступа, и у пользователей есть соответствующее разрешение, адреса пользователей должны отображаться корректно. Однако имейте в виду, что и в этом случае Google может возвращать "Аноним", если безопасность доступа запрещает отображение адресов электронной почты.
Насколько мне известно, чтобы определить email, в таблицу нужно добавить пользователя по почте, а не по ссылке
Похожие вопросы