根据多张工作表中的特定变量返回行值

根据多张工作表中的特定变量返回行值

我不完全确定如何正确地解释这一点,但我们开始吧......

我正在尝试创建一份预算文件,以便管理多个项目的采购和对帐。我想为每个项目创建单独的工作表,并将采购项目填充到主工作表中。

使用条件格式,我已将其中一列设置为显示项目的状态(等待批准、已批准、已订购、已收到)。我希望在状态设置为“已收到”后,整行的内容填充到新的工作表中。工作表应按降序更新。

截屏

任何帮助是极大的赞赏。

答案1

仔细检查了您的问题后,我确定您需要编写一个谷歌脚本来完成此操作。

您需要做的就是:打开 Google 脚本编辑器,创建一个新项目,将其粘贴到脚本底部,将“Reconciliation”重命名为您的电子表格的名称,然后保存。这onEdit()是 Google 脚本中内置的触发器,用于在编辑后进行更新,这checkReceived()是一个手动滚动的示例,可完成您想要的工作。我根据您提供的图像定制了这个“示例”。您将看到,您可以添加任意数量的项目,这将覆盖它们。您可以更改细节以匹配您需要的其他任何内容(即您还应该注意,我将主表称为“Master”),但这应该适合您。请让我知道进展如何。

function checkReceived() {


  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  //The following to ensures you don't run this on another spreadsheet
  if(spreadsheet.getName()=="Reconciliation") //<--This is the name of the spreadsheet I used, change it for yours.
  {  

    var maxIntervalSS = spreadsheet.getNumSheets();
    var theMasterSheet = spreadsheet.getSheetByName("Master");
    var masterSheetID = theMasterSheet.getIndex();
    var sheets = spreadsheet.getSheets();
    var thisRow = theMasterSheet.getRange(1,1); //Arbitrary for initialization

    //Need to Clear existing master data.
    theMasterSheet.getDataRange().clear();

    //Will use a flag to repopulate header.
    var firsttime= true;

    //Iterates through each spreadsheet
    for(var checkingSheetIterator = 0; checkingSheetIterator<maxIntervalSS; checkingSheetIterator++)
    {

      var currentSheet = sheets[checkingSheetIterator];

      //Ignores the iteration if ID equals the master sheet
      if(currentSheet.getIndex()!=masterSheetID)
      {




        //Getting currentSheet's data
        var currentRange = currentSheet.getDataRange();

        //Iterates through the currentSheet's data
        for(var rows = 1; rows<=currentSheet.getLastRow(); rows++)
        {
          //Repopulating header on first time.              
          //"8" for column H, containing the Status
          if(currentRange.getCell(rows,8).getValue()=="Received"|| firsttime)  //<-Note this is your keyword and specified location; "8".
          {  //Add to bottom of sheet
            theMasterSheet.appendRow([currentRange.getCell(rows,1).getValue(),currentRange.getCell(rows,2).getValue(),
                                      currentRange.getCell(rows,3).getValue(),currentRange.getCell(rows,4).getValue(),
                                      currentRange.getCell(rows,5).getValue(),currentRange.getCell(rows,6).getValue(),
                                      currentRange.getCell(rows,7).getValue(),currentRange.getCell(rows,8).getValue(),
                                      currentRange.getCell(rows,9).getValue(),currentRange.getCell(rows,10).getValue(),
                                      currentRange.getCell(rows,11).getValue()]);
            firsttime=false;
          }
        }
      }
    }
  }
};  

function onEdit(){

  checkReceived();

};

以下是电子表格设置的示例。请注意,电子表格的名称是 Reconciliation(图片顶部),页面底部的选项卡(即工作表)名为“Master”、“Project1”和“Project2”。请注意,我没有考虑条件格式,因为它不应该对结果产生任何影响。在此处输入图片描述

相关内容