如何复制范围并仅将包含值的行粘贴到另一个工作表中?

时间:2017-08-07 12:48:38

标签: google-apps-script

让我先说明这一点,我知道简单的解决方案是过滤列/取消选中空白,复制和粘贴值到新列中。问题在于,对于那些不“精通技术”的老师来说,没有什么是简单的。

话虽如此,我正在将同一谷歌电子表格中的多张表格中的数据提取到“主”表格中。我有一个名为“可见性”的自定义菜单项来隐藏/显示空行。隐藏行后,教师单击“复制数据”按钮将A1:A复制到另一个名为“复制”的工作表。这是我遇到问题的地方 - 当数据被复制到“复制”表时,空行也是如此。我只想要复制值的行。

这是我用来将值从Master复制到Copy:

的脚本

/**
 * A function named onEdit will be called whenever
 * a change is made to the spreadsheet.
 * 
 * @param  {object} e The edit event (not used in this case)
 */
function copyRange(e){
  var copyFromRange = 'Master!A1:A'; // no row for second cell reference
  var copyToRangeStart = 'Copy!A1';
  copyValuesOnly(copyFromRange, copyToRangeStart);
}

/**
 * This function will copy the values from a given range to
 * a second range, which starts from the given cell reference
 * 
 * @param  {string} copyFromRange    Range reference eg: 
 * @param  {string} copyToRangeStart Cell reference eg:
 */
function copyValuesOnly(copyFromRange, copyToRangeStart) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getRange(copyFromRange);
  source.copyTo(ss.getRange(copyToRangeStart), {contentsOnly: true});
}

另外,我编辑了一个我发现的脚本,以便得到我正在使用的内容,因此请忽略我的代码中的描述。感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:1)

这应该这样做。注意:您的链接无法访问。

function copyRangeNoEmpties(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Master');
  var copyToSheet=ss.getSheetByName('Copy');
  var copyFromRange=sh.getRange('A1:A');
  var vA=copyFromRange.getValues();
  var oA=[];
  for(var i=0;i<vA.length;i++)
  {
    if(vA[i][0])
    {
      oA.push([vA[i][0]]);
    }
  }
  var copyToRange=copyToSheet.getRange(1,1,oA.length,1);
  copyToRange.setValues(oA);
}