有一个用于将行从一个工作表复制到谷歌工作表中另一个工作表的代码,但它会执行所有不适用于选定或过滤的行

问题描述 投票:0回答:1

我有一个代码,用于将行从一个工作表(公园)复制到谷歌工作表中的另一个工作表(报告)。它工作正常,但问题是,我在工作表“Parks”中有 335 行,并且我不希望工作表“Report”中包含所有这些行。我想在“公园”工作表上应用过滤器,这样它可能会在“公园”工作表中保留 14 行。我希望代码只复制这 14 行,而不是全部(不是全部 335 行),但现在代码正在复制所有行。 有谁可以帮忙修改一下代码吗? 这是代码:

function copyDataFromParksToReport() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var parksSheet = ss.getSheetByName('Parks');
  var reportSheet = ss.getSheetByName('Report');
  
  reportSheet.getRange('A2:M').clearContent();
  
  var parksData = parksSheet.getRange('A4:Q').getValues();
  
  var reportData = [];
  
  parksData.forEach(function(row) {
    var newRow = [];
    newRow[0] = row[16]; // Column Q -> Column A
    newRow[1] = row[0]; // Column A -> Column B
    newRow[2] = row[4]; // Column E -> Column C
    newRow[3] = row[3]; // Column D -> Column D
    newRow[4] = row[1]; // Column B -> Column E
    newRow[5] = row[5]; // Column F -> Column F
    newRow[6] = row[8]; // Column I -> Column G
    newRow[8] = row[10]; // Column K -> Column I
    newRow[10] = row[9]; // Column J -> Column K
    newRow[12] = row[12]; // Column M -> Column M
    
    // Get File ID from Google Drive links
    if (row[6].includes("drive.google.com")) {
      newRow[7] = row[6].split("/")[5]; // Column G -> Column H
    } else {
      newRow[7] = '';
    }
    if (row[11].includes("drive.google.com")) {
      newRow[11] = row[11].split("/")[5]; // Column L -> Column L
    } else {
      newRow[11] = '';
    }
    
    reportData.push(newRow);
  });
  
  reportSheet.getRange(2, 1, reportData.length, reportData[0].length).setValues(reportData);
}

我尝试过 getfilter 类,但没有成功。

javascript google-sheets filter copy row
1个回答
0
投票

使用 getDisplayValues() 获取

在 Parks 工作表上应用过滤器后,它仅获取可见行。

对于跳过空行,我添加了一个条件来跳过完全空的行

(row.join("").trim() !== "")

脚本已更改

来自:

var parksData = parksSheet.getRange('A4:Q').getValues();

致:

var parksData = parksSheet.getRange('A4:Q').getDisplayValues();

来自:

reportSheet.getRange(2, 1, reportData.length, reportData[0].length).setValues(reportData);

致:

if (reportData.length > 0) {
    reportSheet.getRange(2, 1, reportData.length, reportData[0].length).setValues(reportData);
  }

修改脚本

function copyFilteredDataFromParksToReport() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var parksSheet = ss.getSheetByName('Sheet1');
  var reportSheet = ss.getSheetByName('Sheet2');
  
  
  reportSheet.getRange('A2:M').clearContent();
  
 
  var parksData = parksSheet.getRange('A4:Q').getDisplayValues();
  
  var reportData = [];
  
  parksData.forEach(function(row) {
    if (row.join("").trim() !== "") {
      var newRow = [];
      newRow[0] = row[16]; // Column Q -> Column A
      newRow[1] = row[0];  // Column A -> Column B
      newRow[2] = row[4];  // Column E -> Column C
      newRow[3] = row[3];  // Column D -> Column D
      newRow[4] = row[1];  // Column B -> Column E
      newRow[5] = row[5];  // Column F -> Column F
      newRow[6] = row[8];  // Column I -> Column G
      newRow[8] = row[10]; // Column K -> Column I
      newRow[10] = row[9]; // Column J -> Column K
      newRow[12] = row[12]; // Column M -> Column M

      
      if (row[6].includes("drive.google.com")) {
        newRow[7] = row[6].split("/")[5]; 
      } else {
        newRow[7] = '';
      }
      if (row[11].includes("drive.google.com")) {
        newRow[11] = row[11].split("/")[5];
      } else {
        newRow[11] = '';
      }

      reportData.push(newRow);
    }
  });
  
 
  if (reportData.length > 0) {
    reportSheet.getRange(2, 1, reportData.length, reportData[0].length).setValues(reportData);
  }
}

样本输出

表1:

Sheet1(Parks)

表2:

Sheet2(Reports)

参考

© www.soinside.com 2019 - 2024. All rights reserved.