【问题标题】:Getting Specific Rows from Another Google Sheet via App Script Based on Multiple Cell Values通过基于多个单元格值的 App 脚本从另一个 Google 表格中获取特定行
【发布时间】:2021-12-02 02:32:13
【问题描述】:

我想从另一个 google 表中获取数据,然后检索所有列(此列已成功)。至于行,我只想从测量列中检索具有这些值的所有行,“Mrm1,Mrm2,Mrm3”

例如,我在另一张纸上有这些,Original Data

在另一张纸上,我希望结果是这样的:Expected Retrieved Data

到目前为止,我有这个,但我不确定如何在行上应用我需要的东西。此脚本正在检索所有内容。

function Country A() {
  
  var sss = SpreadsheetApp.openById("19-idD8PWuNxnvzRVqBlKhju2RkKxOe8nUQaf9ZMAcgk");  // Source spreadsheet - replace with actual key
  var ss = sss.getSheetByName('Compiled'); // Source sheet - change to actual name
  
  var numRows = ss.getLastRow() // get last row with data
  var numColumn = ss.getLastColumn(); // get last column with data

  var srange = ss.getRange(2,1,numRows,numColumn); // Source range - change to actual range
  var values = srange.getDisplayValues();
  
  
  var lss = SpreadsheetApp.getActiveSpreadsheet(); // Local spreadsheet - the one this script is in
  var targetnumRows = lss.getSheetByName('Country A').getMaxRows();
  var targetnumcolumns = lss.getSheetByName('Country A').getMaxColumns();
  
  var ls = lss.getSheetByName('Country A').getRange(2,1,numRows,numColumn); // Local sheet - change to actual name and Local range - change to actual range
  var TargetRange = lss.getSheetByName('Country A').getRange(2,1,targetnumRows,targetnumcolumns); // Local sheet - change to actual name and Local range - change to actual range
  
  TargetRange.clear() //Clear Sheet Content
  ls.setValues(values);  // Copy from source sheet to local sheet
  var sheet = lss.getSheetByName('Country A');
  var maxColumns = sheet.getMaxColumns();
  var lastColumn = sheet.getLastColumn();
  var maxRows = sheet.getMaxRows();
  var lastRow = sheet.getLastRow();
  
  if (maxColumns-lastColumn != 0){sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn)};
  if (maxRows-lastRow != 0){sheet.deleteRows(lastRow+1, maxRows-lastRow)};
  var TargetHour = lss.getSheetByName('Country A').getRange(1,1).setValue(Utilities.formatDate(new Date(), "CST", "MM-dd-yyyy HH:mm:ss"));   
  
}

请帮助我。谢谢。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    脚本将值存储在二维数组中。您必须遍历元素并删除列 E(列号 4)(A=0,B=1,...E=4)不等于“Mrm1,Mrm2,Mrm3”的元素。 然后将修改后的数组粘贴到第二张表中。

    这是一个例子。 您需要根据您的代码对其进行调整

    function copyData() {
      var ss = SpreadsheetApp.openById("YOUR-ID");
    
      // Stores data as a 2D Array
      var data = ss.getSheetByName("Sheet1").getRange("A1:M10").getValues();
    
      // Remove rows where column E not equals "Mrm1, Mrm2, Mrm3"
      for (var i = 0; i < data.length; i++) {
        if (data[i][4] !== "Mrm1" && data[i][4] !== "Mrm2" && data[i][4] !== "Mrm3") {
          data.splice(i,1);
          i--;
        }
      }
    
      // Paste data in sheet 2
      var pasteRange = "A1:M" + (data.length);
      ss.getSheetByName("Sheet2").getRange(pasteRange).setValues(data);
    }
    

    【讨论】:

    • 谢谢,我试试这个。
    • 它确实有效!太感谢了。但是,目标 targetRange 不起作用,它被粘贴到第一行而不是第二行。
    • 更改 -- "A1:M" + (data.length); -- for -- "A2:M" + (data.length + 1); --
    • 这真是太棒了!非常感谢你的帮助。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多