如何仅将Source工作表的值复制到Dataset工作表最后空白行?
解决Google Sheets脚本仅复制纯值的问题
你的脚本使用copyTo()方法时默认会复制格式、公式等所有内容,要实现仅复制纯值,这里提供两种可行的修改方案:
方案一:修改copyTo()的复制参数
直接在copyTo()中指定仅粘贴值的选项,同时修正目标范围的大小匹配问题:
function copyInfo() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var copySheet = ss.getSheetByName('Dashboard'); var pasteSheet = ss.getSheetByName('Dataset'); // 获取源数据范围 var source = copySheet.getRange(7, 2, 32, 11); // 计算目标起始行,匹配源范围的行列数 var lastRow = pasteSheet.getLastRow(); var destination = pasteSheet.getRange(lastRow + 1, 1, source.getNumRows(), source.getNumColumns()); // 仅复制纯值到目标范围 source.copyTo(destination, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); }
- 原代码重复调用
SpreadsheetApp.openById('Sheet1')属于冗余操作,直接用已获取的ss对象调用getSheetByName()更高效 - 目标范围的行列数要和源范围匹配,避免只粘贴部分数据
SpreadsheetApp.CopyPasteType.PASTE_VALUES参数明确指定仅复制值,不会携带格式或公式
方案二:直接获取值再写入目标范围
通过getValues()获取源范围的纯值数组,再用setValues()写入目标范围,这种方式更直观:
function copyInfo() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var copySheet = ss.getSheetByName('Dashboard'); var pasteSheet = ss.getSheetByName('Dataset'); // 获取源范围的纯值二维数组 var sourceValues = copySheet.getRange(7, 2, 32, 11).getValues(); // 定位目标起始行 var lastRow = pasteSheet.getLastRow(); // 将值写入目标范围 pasteSheet.getRange(lastRow + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues); }
getValues()返回的是仅包含单元格值的二维数组,完全不涉及格式、公式等额外信息setValues()直接将数组内容写入目标单元格,操作更轻量化
内容的提问来源于stack exchange,提问作者Jago Verzuu
相关产品推荐
相关产品推荐

