【问题标题】:How do you copy a range and paste only rows with values into another sheet?如何复制一个范围并仅将具有值的行粘贴到另一个工作表中?
【发布时间】:2019-02-11 06:43:13
【问题描述】:

让我先说我意识到简单的解决方案是过滤列/取消选中空白,复制并将值粘贴到新列中。问题是,对于不“精通技术”的老师来说,没有什么是简单的。

话虽如此,我正在将同一个 Google 电子表格中的多个工作表中的数据提取到“主”工作表中。我有一个名为“可见性”的自定义菜单项来隐藏/显示空行。隐藏行后,教师单击“复制数据”按钮将 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});
}

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

【问题讨论】:

  • 在 App 脚本中没有直接的方法来做到这一点...为Feature Request 加注星标,或者您可以使用 Sheets 高级服务

标签: google-apps-script


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多