从多个电子表格创建数据库,并不断更新

我有一个电子表格模板,其中包含3个工作表,可为客户执行3种类型的任务(我们将工作表称为“ task1”,“ task2”和“ task3”)。

  • 每个客户端(“ client1”,“ client2” ...)都有使用此模板制作的电子表格。
  • 每次在包含其详细信息的新行中执行新任务时,每个客户的工作表都会不断更新。
  • 可能会添加新客户(=新点差)。

我想创建一个“任务文档母版”-一个数据库,该数据库将分3页(“ task1母版”,“ task2母版”,“ task3母版”)保存,其中所有行所有客户的所有工作表。

  1. 如何动态地保持所有散点数据的更新(数据库中的空白行不应该更新)?
  2. 如何定义同步范围(例如-仅从第4行到O列同步)?

谢谢!

yifeichongtian1234 回答:从多个电子表格创建数据库,并不断更新

使用Spreadsheet Service [1]的方法并将onEdit触发器安装到每个客户端Spreadsheets [2],我可以通过以下代码实现所需的过程:

function myFunction(e) {
  //Get edited client row and Sheet  
  var editedCell = e.range;
  var editedRow = editedCell.getRow();
  var clientSheet = editedCell.getSheet();

  //Number of headers on task sheet
  var noColumnHeaders = clientSheet.getRange("A4").getDataRegion(SpreadsheetApp.Dimension.COLUMNS).getValues()[0].length;
  //Entire row based on number of headers
  var completeRow = clientSheet.getRange(editedRow,1,noColumnHeaders).getValues();
  //Check if the row is completely filled 
  var isFilled = completeRow[0].indexOf("");

  if(isFilled == -1) {
    //Get master Spreadsheet
    var masterSpreadsheet = SpreadsheetApp.openById("[MASTER-SPREADSHEET-ID]");

    //Get master task sheet and set the values from client
    var masterSheet = masterSpreadsheet.getSheetByName(clientSheet.getSheetName() + " master");
    masterSheet.getRange(masterSheet.getLastRow()+1,noColumnHeaders).setValues(completeRow);
  }
}

function createSpreadsheetEditTrigger() {
  var clientSpreadsheet = SpreadsheetApp.openById("[CLIENT-SPREADSHEET-ID]");
  ScriptApp.newTrigger('myFunction')
  .forSpreadsheet(clientSpreadsheet)
  .onEdit()
  .create();
}

每次要添加客户端电子表格(首先替换给定电子表格ID)时,都需要运行createSpreadsheetEditTrigger函数。另外,替换myFunction上的主电子表格ID。

[1] https://developers.google.com/apps-script/reference/spreadsheet

[2] https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually

本文链接:https://www.f2er.com/3157123.html

大家都在问