Google表格+ Apps脚本,从一个工作表复制/粘贴到另一个工作表,但粘贴到特定列(B)中的第一个空单元格中

时间:2020-10-27 22:54:15

标签: google-apps-script google-sheets

  • 我正在尝试编写一个脚本,该脚本将从一个工作表上的某个区域复制数据,然后粘贴到B列的第一个空白单元格中。另外,我有一个脚本可以将其粘贴到第一个空白单元格中。工作表,并且工作正常,但是我在A列中有一个ID号的静态行,因此当粘贴数据时,它沿着工作表向下移动。因此,我需要一种跳过A列并粘贴到B列中第一个空单元格的方法。希望这是有道理的。

  • 另一部分是B列中有时会有空单元格。因此,它需要跳过那些以获取最后一个空单元格。

  • 我找到了一个获取最后一个空单元格并使其正常运行的教程,但无法弄清楚如何将其合并到粘贴数据的函数中。这是我到目前为止的内容:

function myFunction() {
  var sss = SpreadsheetApp.openById('1dp5s8G9vFF5LzF5mAaY-JoySLGekh5UKHwt6jFcGOnA');
  var ss = sss.getSheetByName('Form'); 
  var range = ss.getRange('A8:H');
  var data = range.getValues();
 
     var tss = SpreadsheetApp.openById('1Vq_xX9cbC6OBAh1IRKsVKSPQvc5FEUFsJ2mlPzuFZ6o');
     var ts = tss.getSheetByName('Data');
     var columnToCheck = ts.getRange("B:B").getValues();
     var lastRow = getLastRowSpecial(columnToCheck);
  
  
     Logger.log(lastRow)
};
 

function getLastRowSpecial(range){
  var rowNum = 0;
  var blank = false;
  for(var row = 0; row < range.length; row++){
 
    if(range[row][0] === "" && !blank){
      rowNum = row;
      blank = true;
    }else if(range[row][0] !== ""){
      blank = false;
    };
  };
  return rowNum;
};

  • 所以基本上我需要一个函数来设置由“ lastRow”确定的单元格中的value(data)

  • 或者,如果有人对如何以另一种方式实现此建议,我很想听听。

1 个答案:

答案 0 :(得分:2)

说明:

  • 您非常亲密。 getLastRowSpecial函数的确获取了列B的最后一行,并考虑了空白单元格。

  • 您的目标是使用返回值lastRow,并使用setValues设置从lastRow+1开始的数据。

    ts.getRange(lastRow+1,2,data.length,data[0].length).setValues(data);
    
  • 我在脚本中进行的另一项修改不是代替完整的data范围,而是直到内容的最后一行。如果这对您不起作用,则跳过该部分并使用您的解决方案。这是我修改的部分:

    var range = ss.getRange('A8:H'+ss.getLastRow());
    

解决方案:

我只修改了myFunction

function myFunction() {
  var sss = SpreadsheetApp.openById('1dp5s8G9vFF5LzF5mAaY-JoySLGekh5UKHwt6jFcGOnA');
  
  var ss = sss.getSheetByName('Form'); 
  var range = ss.getRange('A8:H'+ss.getLastRow()); // new code
  var data = range.getValues();
 
     var tss = SpreadsheetApp.openById('1Vq_xX9cbC6OBAh1IRKsVKSPQvc5FEUFsJ2mlPzuFZ6o');
     var ts = tss.getSheetByName('Data');
     var columnToCheck = ts.getRange("B:B").getValues();
     var lastRow = getLastRowSpecial(columnToCheck);
     
     ts.getRange(lastRow+1,2,data.length,data[0].length).setValues(data); // new code

};
 
function getLastRowSpecial(range){
  var rowNum = 0;
  var blank = false;
  for(var row = 0; row < range.length; row++){
 
    if(range[row][0] === "" && !blank){
      rowNum = row;
      blank = true;
    }else if(range[row][0] !== ""){
      blank = false;
    };
  };
  return rowNum;
};