Google apps script 如何将列复制到另一列的第一个空白单元格?

Google apps script 如何将列复制到另一列的第一个空白单元格?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在A列中有一些值,我想复制B列的第一个空单元格 我设法找到了问题的第一部分: function CopyValues() { var ss = SpreadsheetApp.getActiveSpreadsheet (); var source = ss.getRange ("MySheet!A4:A10"); source.copyTo (ss.getRange ("MySheet!B32"), {contentsOnly: true}); } 其中B32是B列中的第一个空

我在A列中有一些值,我想复制B列的第一个空单元格

我设法找到了问题的第一部分:

function CopyValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var source = ss.getRange ("MySheet!A4:A10");

  source.copyTo (ss.getRange ("MySheet!B32"), {contentsOnly: true});

}
其中B32是B列中的第一个空单元格

这工作得很完美,但当然B32并不总是第一个空单元,我需要动态获取第一个空单元。我尝试了一些事情,通过合并在线找到的其他脚本,但到目前为止没有成功

任何帮助都将不胜感激! 谢谢大家!

试试这个:

function getColumnHeight(col,sh,ss){
  var ss=ss || SpreadsheetApp.getActive();
  var sh=sh || ss.getActiveSheet();
  var col=col || sh.getActiveCell().getColumn();
  var rg=sh.getRange(1,col,sh.getLastRow(),1);
  var vA=rg.getValues();
  while(vA[vA.length-1][0].length==0){
    vA.splice(vA.length-1,1);
  }
  return vA.length;
}
getColumnHeight()+1是您想要的

另一个版本:

function getColumnHeight(col,sh,ss){
  var ss=ss||SpreadsheetApp.getActive();
  var sh=sh||ss.getActiveSheet();
  var col=col||sh.getActiveCell().getColumn();
  const rcA=sh.getRange(1,col,sh.getLastRow(),1).getValues().reverse()
  let s=0;
  for(let i=0;i<rcA.length;i++) {
    if(rcA[i][0].toString().length==0) {
      s++;
    }else{
      break;
    }
  }
  return rcA.length-s;
}
函数getColumnHeight(col、sh、ss){ var ss=ss | | SpreadsheetApp.getActive(); var sh=sh | | ss.getActiveSheet(); var col=col | | sh.getActiveCell().getColumn(); const rcA=sh.getRange(1,col,sh.getLastRow(),1).getValues().reverse() 设s=0;
对于(设i=0;i这里有一个函数,它将返回给定列和表中的第一个空单元格(如字符串“B32”):

function getFirstEmptyCellInCol(sheet, column) {
  var values = sheet.getRange(column + ':' + column).getValues(); // get all the data of the column
  var rowCount = 0;
  while ( values[rowCount] && values[rowCount][0] != "" ) {
    rowCount++;
  }
  return column + parseInt(rowCount+1).toString();
}
你可以这样称呼它:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MySheet");
emptyCell = getFirstEmptyCellInCol(sheet,'B');
使用您的代码:

function CopyValues() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MySheet");
  var emptyCell = getFirstEmptyCellInCol(sheet,'B');
  var source = sheet.getRange ("A4:A10");
  source.copyTo (sheet.getRange(emptyCell), {contentsOnly: true});
}

非常感谢!工作非常完美:)祝你有个愉快的一天!KEV请考虑把我的答案标记为“接受”(左边的检查标记),如果它对你有用的话。