【问题标题】:How to copy (and then delete) a row from sheet x to sheet y based on value in column 1?如何根据第 1 列中的值将行从工作表 x 复制(然后删除)到工作表 y?
【发布时间】:2019-04-14 14:19:06
【问题描述】:

我正在使用 Google 表格并尝试设置一个 Apps 脚本宏

  1. 在工作表“Sheet1”中查找“A”列中值为“True”的行
  2. 复制此行并将其粘贴到工作表“Sheet2”中最后一个填充行下方的行中
  3. 删除“Sheet1”中的行

我一直在尝试论坛上另一篇帖子的代码,但我不断收到:TypeError:无法从未定义中读取属性“长度”。 (第 20 行,文件“代码”)

任何帮助将不胜感激

function copyrange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1"); //source sheet
  var testrange = sheet.getRange("A2:AE990");
  var testvalue = (testrange.getValues());
  var csh = ss.getSheetByName("Sheet2"); //destination sheet
  var data = [];
  var j =[];

  //Condition check in G:G; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
  if ( testvalue[i] == "TRUE") {
  data.push.apply(data,sheet.getRange(i+1,1,1,11).getValues());
  //Copy matched ROW numbers to j
  j.push(i);
 }
 }
//Copy data array to destination sheet

 csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);

//Delete matched rows in source sheet
  for (i=0;i<j.length;i++){
  var k = j[i]+1;
  sheet.deleteRow(k);

//Alter j to account for deleted rows
  if (!(i == j.length-1)) {
  j[i+1] = j[i+1]-i-1;
}
}
}

【问题讨论】:

  • "真" !== "真"
  • @TheMaster 谢谢!我用“true”替换了“TRUE”,但我仍然无法让它工作。也许我错过了一些东西,例如上述函数是否在 A 行中查找“True”变量?
  • “真”!==“真”。你能展示一下 A:A 的截图吗?
  • imgur.com/a/fVRCQPJ - 给你答:答 - 感谢您花时间看这个!
  • 看起来像布尔值而不是字符串。另外,它是一个二维数组,您需要添加一个[0]。所以,试试if ( testvalue[i][0] ){...}if ( testvalue[i][0] == "True") {if ( testvalue[i][0].toString() == "TRUE") {

标签: google-apps-script google-sheets


【解决方案1】:

试试这个:

function moveRows() {
  var ss=SpreadsheetApp.getActive();
  var ssh=ss.getSheetByName('Sheet1');
  var dsh=ss.getSheetByName('Sheet2');
  var srg=ssh.getDataRange();//You might want to specify a more unique range. This just gets all of the data on the sheet
  var svA=srg.getValues();
  var d=0;//deleted row counter
  //I  assume one row for a header
  for(var i=1;i<svA.length;i++) {
    if(svA[i][0].toString().toLowerCase()=='true') {
      dsh.appendRow(svA[i]);//append entire row to Sheet2
      ssh.deleteRow(i-d+1);//accounts for the difference between length of array and number of remaining row.
      d++;
    }
  }
}

【讨论】:

  • 这就像一个魅力 - 非常感谢!如果条件变量从“TRUE”变为“yesTRUE”并且变量的行不是“A”而是“AE”,我将如何更改代码?
  • 这个if(svA[i][0].toString().toLowerCase()=='true') {会变成这个if(svA[i][30]=='yesTRUE') {
  • 请核对答案。谢谢
  • 完成!对此很陌生,所以没有意识到有一个检查。感谢您的帮助
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2023-03-28
  • 2021-10-24
相关资源
最近更新 更多