让我先说明这一点,我知道简单的解决方案是过滤列/取消选中空白,复制和粘贴值到新列中。问题在于,对于那些不“精通技术”的老师来说,没有什么是简单的。
话虽如此,我正在将同一谷歌电子表格中的多张表格中的数据提取到“主”表格中。我有一个名为“可见性”的自定义菜单项来隐藏/显示空行。隐藏行后,教师单击“复制数据”按钮将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});
}
另外,我编辑了一个我发现的脚本,以便得到我正在使用的内容,因此请忽略我的代码中的描述。感谢您提供任何帮助!
答案 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);
}