在此先感谢您的帮助。我是应用脚本的新手。
我有一个gsheet,包含98列和25000行。我要做的就是将98列中的24列复制到新工作表中。
当前我正在使用过滤器和地图,并且可以正常工作:
var data = sourceSheet.getDataRange()。getValues(); //将所有列和行读入数组
var filterData = data.filter(function(e,j){return j> 0 && e})。map(function(e){return [e [88],e [14],e [13], e [4],e [17],e [87],e [91],e [48],e [57],e [31],e [89],e [82],e [70], e [97],e [47],e [30],e [72],e [71],e [67],e [34],e [33],e [00],e [38], e [39]]}); //仅将我想要的列提取到新数组中
但是第二行要花将近一个小时才能执行!我猜想是因为它只是按返回方式处理每个元素,即使它只是返回每个元素。
我没有一次尝试getValue'ing和setValue'ing列,因为我读到的所有内容都会限制外部调用并在内存中进行所有操作。而且我无法想象将元素逐1推送会比过滤更快。
建议更快执行?
答案 0 :(得分:2)
function doCopy(SpreadID, OrgSheet, DestSheet, OrgRange, Sql, DestCell) {
var mySpread = SpreadsheetApp.openById(SpreadID);
var myQry = '=QUERY(' + OrgSheet + "!" + OrgRange + ',\"'+ Sql + '\")';
var myDestSheet = mySpread.getSheetByName(DestSheet);
myDestSheet.getRange(DestCell).setFormula(myQry);
}
要致电的示例,但目标表必须为空白:
doCopy(spreadsheetId,"Sheet1", "Sheet2", "A:G", "Select A, C, F", "A1");
答案 1 :(得分:0)
另一种解决问题的方法可能更省时,更容易实现:
使用copyTo(spreadsheet)
(https://developers.google.com/apps-script/reference/spreadsheet/sheet#copytospreadsheet)将原始工作表复制为新工作表。您可能还需要查看这篇文章,以获取有关在同一电子表格(Google Script to Duplicate Sheet that is Not Active)中创建工作表的更多信息
删除不想保留的列deleteColumn(columnPosition)
或deleteColumns(columnPosition, howMany)
(请参阅https://developers.google.com/apps-script/reference/spreadsheet/sheet#deletecolumncolumnposition)。
您可能还希望开始从工作表的右侧删除列,以使实现更容易。
让我知道是否有帮助。