0

我想要一个主要的“主”Google 表格根据状态条件写入另一个“子”Google 表格的单独表格。如果一个项目是“已完成”、“已批准”或“就绪”,这些将显示在它们自己的选项卡上。我用 Functions 解决了这个问题,但它很笨重,而且单张纸中有一个 Fetch 限制。我研究了 JavaScript(我认为这是最简单的答案),但我做错了,并且找不到一个能够准确定义我要完成的工作的示例。

这就是我想要做的:

IF "Management" sheet & column "Status" = "Finished"  
    THEN write to "Production" sheet on the "Finished" tab  
ELSE IF "Management" sheet & column "Status" = "Approved"  
    THEN write to "Production" sheet on the "Approved" tab  
ELSE IF "Management" sheet & column "Status" = "Ready"  
    THEN write to "Production" sheet on the "Ready" tab  

这需要实时更新。

“管理”表将驱动(填充)“生产”表: https ://docs.google.com/spreadsheets/d/19NIn4TukYnKkkpOg8E8s-6loS8rCplf-tGpY2cENIwQ/edit?usp=sharing

“生产”表是一个假人,仅显示我打算脚本执行的操作: https ://docs.google.com/spreadsheets/d/1aCh0_GzQKzbUxWAn8e27q0-z48tmxK0mK8wGMm2YDuk/edit?usp=sharing

我知道这最好使用数据库来完成,但我的管理层以无限的智慧放弃了一个非常好的基于 Access 的 MIS ($),而是使用了一个免费的电子表格系统。他们把它留给了我们这些几乎没有编程知识的中层管理人员来让它发挥作用。我有一些编程知识,如果你算上 COBAL 和 1978 AppleSoft!

4

1 回答 1

0

在源电子表格中,设置在编辑时运行的简单触发器。当您在源电子表格中编辑单元格时,会引发一个事件对象并将其作为参数传递给 onEdit() 函数。

该函数检查事件的上下文并在满足所有条件时尝试写入目标工作表。该函数使用输入的值在目标文件中查找相关工作表。如果工作表不存在,则会在源文件中显示错误消息。

function onEdit(event){

       var sourceSpreadsheet = event.source;
       var targetSpreadsheet = SpreadsheetApp.openById(yourId); //spreadsheet to write to
       var sheet = sourceSpreadsheet.getActiveSheet(); //sheet that was edited
       var row = event.range.getRow();
       var col = event.range.getColumn();
       var statusColNumber = 2; //column number of the 'Status' column


      if(sheet.getName() == "Management" && col == statusColNumber){

          var value = event.value;

         if(!value) { //checking if the value is an empty string or undefined

              return;
          }

          try {

         var targetSheet = targetSpreadsheet.getSheetByName(value);

         targetSheet.getRange("A1").setValue("Hello from row number " + row);


         } catch(error) {

             sourceSpreadsheet.toast("Failed. Sheet " + value + " not found in target spreadsheet");



           }



      }
于 2017-06-26T14:32:50.817 回答