Создание макросов Google Sheets для автоматического обновления - PullRequest
0 голосов
/ 11 июля 2019

Я хочу сделать самообновляющийся лист Google для использования в моем домашнем проекте. вот основная разбивка: У меня есть файл листа Google с несколькими листами (вкладками). Я хочу добавить макросы, которые будут делать следующее:

  1. Если я добавлю значение на лист, который называется «входящий», я хочу, чтобы значение (строка / столбец) автоматически добавлялось на все остальные листы: 1..n

  2. После добавления нового элемента на лист (основное предположение состоит в том, что все данные на листе имеют одинаковый формат) Я хочу, чтобы листы сортировались по новым данным (на основе правила, которое я буду дай им)

В настоящее время у меня настроен лист Google, но я не смог найти способ автоматического обновления Ниже мой код:


function updateOnNewRow() {
  //#TODO: Add a trigger gor a specific sheet in the spreadsheet 
  var updatesSheet ="";
  var notificationEmail ="";
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var updatedSheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  var lastRow = sheet.getLastRow();
  var numRows = 1;   // Number of rows to process
  var cols = sheet.getLastColumn();
  // Fetch the range of cells
  var dataRange = sheet.getRange(lastRow, 1, numRows, cols)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();

  // Fetch your row as an array
  var lastRowData = data[0];
  var newEntry = lastRowData.join(",");

  // get all sheets
  var sheetNameArray = [];
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  sheetNameArray = sheets.map(function(sheet){
    return [sheet.getName()];
  });  
  // cycle through sheets :   
  for (var priceSheet in sheets)
  {
    //ignore 'updates' sheet
    var currentSheet = sheets[priceSheet].getSheetName();
    if (currentSheet==null)
      {
        // Handle sheet name failure
        var errorMessage = "getSheetByName returend null";
        Logger.log(errorMessage);        
      }
    else if (currentSheet != updatedSheetName) 
    {
      //get Sheet
      var formattedData = []
      var workingSheet = SpreadsheetApp.getActive().getSheetByName(currentSheet);
      // Get all populated rows in sheet:
      var workDataRange = workingSheet.getDataRange().getValues();      
      // created formatted data array
      for (var i = 1; i < workDataRange.length; i++) {
        var row = workDataRange[i];
        var dataRow = row.join(",");
        formattedData.push(dataRow)
        Logger.log(row + " : Added to the array");
      } 
      if (formattedData.indexOf(newEntry)<0)
      {
        workingSheet.appendRow(lastRowData);
        Logger.log("Appended to sheet: "+currentSheet+"; Row:"+newEntry);
      }
    }  
  }
  // Format data by separating values into comma separated list for email
  //var emailContent = lastRowData.join(",");
  // Send an email (change this to your email)
  //MailApp.sendEmail(notificationEmail, 'Email subject', emailContent);
  // Log contents for debugging      
 // Logger.log(emailContent);
}

Пример данных в документе

Основной лист: ликеро-водочный завод | Тип | Объем | Комментарий | самый дешевый Дистрибьютор | цена | Дистрибьютор 1 | ... | Дистрибьютор N

Distirbutor Sheet: Ликеро-водочный завод | Тип | Объем | Комментарий | Низшая цена | Update_Date 1 | ... | Update_Date N

Таблица обновлений / Новый лист данных: Ликеро-водочный завод | Тип | Объем | Комментарий | Цена | Дистрибьютор | Дата | Обновлено (Да / Нет)

1 Ответ

3 голосов
/ 11 июля 2019

Apps Script предоставляет вам функции автоматического запуска, поэтому onEdit (e) позволяет вам выполнять действие (например, добавлять значения), когда происходит событие редактирования.Таким образом, (e) является объектом события с такими аргументами, как e.range (диапазон, который был отредактирован).

Вы можете получить доступ к значениям, строке и столбцу e.range.Другими словами - вы можете создать функцию, которая будет запускаться автоматически каждый раз при изменении диапазона и добавлять значения диапазона к соответствующему диапазону в вашем workingSheet.

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