【问题标题】:Retrieve row from a table (with a specific value) and insert specific row to a new sheet从表中检索行(具有特定值)并将特定行插入新工作表
【发布时间】:2015-01-04 18:40:41
【问题描述】:

我是新手,想不通。这是场景

1)我有一张表,其中有 3 列,其中一列有类别值。

2)我正在编写一个脚本,我从表中选择范围并在该特定列中查找该值。

3)如果该行具有我正在寻找的值,我想复制表格的整行并将其粘贴到新的电子表格上。

函数 myFunction() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

var range =sheet.getRange('B1:B35');

var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");

var verduras ='verduras';

var rule = SpreadsheetApp.newDataValidation().requireTextEqualTo('Category').copy();

range.setDataValidation(规则); range.copyValuesToRange(destination, 1, 2, 1, 2);

}

解决方案:

function myFunction() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TableWithInformation");
  var columnToSearch = 2; // B column 
  var lastrow = sheet.getLastRow();
  Logger.log(sheet.getLastRow());
  var range =sheet.getRange(1,columnToSearch,sheet.getLastRow(),columnToSearch);
  var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Report");
  var values = range.getValues();

  //Destination  
  var numberOfColumns = 3;
  var numberOfRows = 1 ;
  var startColumn = 1;
  var startRow = 2;

  // equivalent to destination.getRange('A1:C3');     
  var count = 0
  var destRow = destination.getLastRow()+1
  for(var i=0;i<values.length;i++){
    Logger.log("i is now: " +i);
    Logger.log("Current row value: " +values[i][0]) 

    if(values[i][0] == 'Category'){
      Logger.log("*** Value found in cloumn: " +values[i][0] +"**** \n Count: " +i);
      count++;

      var rangeToCopy = sheet.getRange((i+1), 1,numberOfRows,numberOfColumns);

      var destinationRange = destination.getRange(destRow, startColumn,numberOfRows,numberOfColumns);
      destRow++;
      Logger.log("Next Destination row: " + destRow);
      rangeToCopy.copyTo(destinationRange);


    }
  }

}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这样的:

    function myFunction() {
    var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getDataRange().getValues();
    for(var i = 0, len = values.length; i < len; i++){
    if(values[i][1] == 'Category'){
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3").appendRow(values[i]); 
    }
    }
    }
    

    【讨论】:

      【解决方案2】:

      我真的不明白你想通过数据验证规则实现什么。

      我会使用循环并搜索您正在寻找的值。如果在该范围内找到该值,则复制该范围的一个或多个值。

      下面是一个例子,如果你想要的话,你需要修改它来复制整行。这只会复制 B 列中的值。

      编辑:

      function myFunction() {
      
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
        var columnToSearch = 2; // B column 
      
        Logger.log(sheet.getLastRow());
        var range =sheet.getRange(1,columnToSearch,sheet.getLastRow(),columnToSearch);
        var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
        var values = range.getValues();
      
        //Destination  
        var numberOfColumns = 3;
        var numberOfRows = 1 ;
        var startColumn = 1;
        var startRow = 1;
                               // equivalent to destination.getRange('A1:C3');     
        var destinationRange= destination.getRange(startRow, startColumn,numberOfRows,numberOfColumns); 
        var count = 0;
        for(var i=0;i<values.length;i++){
          Logger.log("i is now: " +i);
          Logger.log("Current row value: " +values[i][0]) 
          if(values[i][0] == 'Category'){
            Logger.log("*** Value found in cloumn: " +values[i][0] +"**** \n Count: " +i);
            count++;
            var rangeToCopy = sheet.getRange(i, 1,numberOfRows,numberOfColumns);
            rangeToCopy.copyTo(destinationRange);
          }
        }
      
      }
      

      我认为如果你学习一些基本的控制结构和javascript会更容易。网上有很多不错的资源,例如:

      http://www.codecademy.com/en/tracks/javascript

      还可以查看 google 参考页面以了解特定的 google 应用程序功能的作用。

      https://developers.google.com/apps-script/reference/spreadsheet/range

      【讨论】:

      • 感谢您的回答@kyuzo,我添加了您建议的代码,但仍有一些问题。我已经编辑了上面的问题。再次感谢您。
      • 感谢@kyuzo 的帮助,我不得不稍微调整一下,但它确实奏效了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多