Поделиться через


Уведомление пользователей с помощью комментариев

В этом примере показано, как добавить комментарии в ячейку , включая @mentioning коллегу.

Пример сценария

Руководитель группы поддерживает расписание смен. Они назначают идентификатор сотрудника записи смены. Если руководитель команды хочет уведомить сотрудника, он добавляет комментарий, что @mentions сотрудник. Сотруднику по электронной почте будет отправлено пользовательское сообщение с листа. Затем сотрудник может просмотреть книгу и ответить на комментарий в удобное для себя время.

Решение

  1. Скрипт извлекает сведения о сотрудниках из листа сотрудников.
  2. Затем скрипт добавляет комментарий (включая соответствующий адрес электронной почты сотрудника) в соответствующую ячейку в записи смены.
  3. Существующие примечания в ячейке удаляются перед добавлением нового комментария.

Настройка: пример файла Excel

Эта книга содержит данные, объекты и форматирование, ожидаемые скриптом.

Пример кода: добавление комментариев

Добавьте следующий скрипт в пример книги и попробуйте его самостоятельно!

function main(workbook: ExcelScript.Workbook) {
  // Get the list of employees.
  const employees = workbook.getWorksheet('Employees').getUsedRange().getTexts();

  // Get the schedule information from the schedule table.
  const scheduleSheet = workbook.getWorksheet('Schedule');
  const table = scheduleSheet.getTables()[0];
  const range = table.getRangeBetweenHeaderAndTotal();
  const scheduleData = range.getTexts();

  // Find old comments, so we can delete them later.
  const oldCommentAddresses = scheduleSheet.getComments().map(oldComment => oldComment.getLocation().getAddress());

  // Look through the schedule for a matching employee.
  for (let i = 0; i < scheduleData.length; i++) {
    const employeeId = scheduleData[i][3];

    // Compare the employee ID in the schedule against the employee information table.
    const employeeInfo = employees.find(employeeRow => employeeRow[0] === employeeId);
    if (employeeInfo) {
      const adminNotes = scheduleData[i][4];
      const commentCell = range.getCell(i, 5);

      // Delete old comments, so we avoid conflicts.
      if (oldCommentAddresses.find(oldCommentAddress => oldCommentAddress === commentCell.getAddress())) {
        const comment = workbook.getCommentByCell(commentCell);
        comment.delete();
      }

      // Add a comment using the admin notes as the text.
      workbook.addComment(commentCell, {
        mentions: [{
          email: employeeInfo[1],
          id: 0, // This ID maps this mention to the `id=0` text in the comment.
          name: employeeInfo[2]
        }],
        richContent: `<at id=\"0\">${employeeInfo[2]}</at> ${adminNotes}`
      }, ExcelScript.ContentType.mention);
    } else {
      console.log("No match for: " + employeeId);
    }
  }
}