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



我有一个电子表格模板,它包含3张工作表,用于为客户端创建的3种类型的任务(让我们将这些工作表称为"task1"、"task2"one_answers"task3"(。

  • 每个客户端("客户端1"、"客户端2"…(都有自己的电子表格,这些表格都是用这个模板制作的
  • 每次在包含其详细信息的新行中创建新任务时,每个客户端的每张工作表都会不断更新
  • 可能会添加新的客户端

我想创建一个"任务文档母版"-一个数据库,它将在3张工作表("task1母版"、"task2母版"one_answers"task3母版"(中为所有客户端保存所有工作表中的所有行。

  1. 如何使其动态更新所有Spreadshot中的所有数据(不应更新数据库中的空白行(
  2. 如何定义同步范围(例如,仅从第4行到第O列进行同步(

谢谢!

使用电子表格服务[1]的方法,并在每个客户端的电子表格[2]上安装onEdit触发器,我用以下代码实现了您想要的过程:

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, 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, 1, 1, noColumnHeaders).setValues(completeRow);
}
}
function createSpreadsheetEditTrigger() {
var clientSpreadsheet = SpreadsheetApp.openById("[CLIENT-SPREADSHEET-ID]");
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(clientSpreadsheet)
.onEdit()
.create();
}

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

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

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

最新更新