从不断变化的电子表格中提取分散的数据

时间:2019-12-17 10:43:45

标签: loops for-loop google-apps-script google-sheets

我正在尝试编写包含多个部分的脚本。当前部分(函数copyOver)应该打开电子表格(按ID),从中提取特定数据并将其插入到主电子表格中。

我遇到的问题是电子表格每天都会更改。有时有些单元格包含“海水”数据,有些日子则没有。理想情况下,我正在尝试编写一个脚本,该脚本循环遍历工作表以查找单元格中的特定选项卡名称(例如:海水,氯含量...),并从下面的行中提取数据,直到第二个选项卡和以此类推。我只需要非常具体的数据,例如“ C6”,“ E6”,“ F10”中的数据,但是这些单元格总是在变化,因此我必须使用它们上方单元格中的选项卡名称来查找它们。每个选项卡及其随附的数据将有多个数组。

是否可以通过这种方式提取数据并将其放入包含制表符值作为标题或标题以及与该特定制表符连接的数据的数组中。

var sourceID = "source sheet ID";
  var main = SpreadsheetApp.openById("master sheet ID"); // MASTER
  var source = SpreadsheetApp.openById(sourceID); //the workbook you're copying from
  var mainsheet = main.getSheetByName("Lab Data"); // the sheet you want to copy the stuff into
  var sourcesheet = source.getSheetByName("ANALYSIS REPORT"); // the sheet you're copying from  
  var dataRange = sourcesheet.getDataRange().getValues(); // gets sheet as data range


// finds SEA WATER tab in cell and gets the range below until the end of the document
// this is the range I need to find the rest of the tabs and the data under them.
  var cont = "SEA WATER";  
    var i = [];
    for (var y = 0; y < dataValues.length; y++){
      if(dataValues[y] == cont){
      i.push(y);
      } // end if
    } // end for 
    Logger.log(i);
    var Row = Number(i)+Number(dataRange.getRow()); // gets the row number of SEA WATER tab
    Logger.log("row number:   " + Row); 

    var swLast = sourcesheet.getLastRow();
    var swRange = sourcesheet.getRange(Row,2,swLast,11); 
    var swValues = swRange.getValues(); // range of needed information
    Logger.log("sw:   " + swValues);

    var con2 = "SW outlet SW from Coarse filtration"; // looking for the secondary tab, within the 
    range 
    I got from the first loop
    var res2 = [];
      for(var i2 = 0; i2 < swValues.length; i2++) {
      if(swValues[i2][4] === con2) res2.push(data[i2])
    var row2 = Number(i2)+Number(swRange.getRow());
    Logger.log("row2   " + row2); 
      } // for end

    var look1 = "SW outlet SW from Coarse filtration ";
    for(var i1 = 0; i1<dataRange.length;i1++){
      if(dataRange[i1][1] == look1){ 
        return i1+1;
      }
    } 
     Logger.log((i1+1));    
} // end of function

编辑:这是工作表的链接。所需数据从第237行开始,直到第268行-但这可能每天都在变化。 (出于隐私原因删除了该信息。) 基本上,我需要所有带有“ x”的单元格,最好还有它们上方的标题单元格,因此我将知道它是什么数据。

https://docs.google.com/spreadsheets/d/1HQkuIBwesqaJxC7WOOpFqrGzW8ETR0MCDN-eXewJ1ng/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

下面的代码循环浏览B列中的标题,并找到您感兴趣的标题所在的行

随后,它将从这一行开始到最后一个数据行的数据复制到工作表“ Lab Data”中:

function myFunction() {
  var sourceID = "source sheet ID";
  var main = SpreadsheetApp.openById("sourceID"); // MASTER
  var source = SpreadsheetApp.openById(sourceID); //the workbook you're copying from
  var mainsheet = main.getSheetByName("Lab Data"); // the sheet you want to copy the stuff into
  var sourcesheet = source.getSheetByName("ANALYSIS REPORT"); // the sheet you're copying from  
  var dataRange = sourcesheet.getDataRange()
  var dataValues=dataRange.getValues(); // gets sheet as data range
  for (var a = 0; a < dataValues.length; a++){
    if(dataValues[a][1]=="SEA WATER"){
      var Row=a+1;
      break;
    }
  }
  if(Row){
    var swLast = sourcesheet.getLastRow();
    var swRange = sourcesheet.getRange(Row,2,swLast,11); 
    swRange.copyTo(mainsheet.getRange(mainsheet.getLastRow()+1, 2)); 
  }
} // end of function

我希望这有助于解决您的问题。