首页 > 解决方案 > 我对缩短代码和使用特定范围的方法有疑问

问题描述

我对应用程序脚本没有足够的了解,所以我使用了宏并尝试缩短代码,但找不到缩短此代码的方法。另外,我想知道是否有一种方法可以选择某些范围并仅针对该范围自动填充。

目前,我不知道,所以我只是把整个专栏...;; 并弹出异常提示“异常:单元格引用超出范围('宏'文件,第 30 行)”以下代码的最后一行代码是第 30 行(spreadsheet.getRange('E2:F3001')。激活().sort({列:1,升序:真});)

你能帮我解决这个问题吗?任何意见,将不胜感激。

function myFunction3() { var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A2:B2').activate();
var currentCell = spreadsheet.getCurrentCell();

spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('sheet9'), true);
spreadsheet.getRange('A2').activate();
spreadsheet.getRange('\'sheet8\'!A2:B').copyTo(spreadsheet.getActiveRange(),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getRange('A2').activate();
currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getRange('E2').activate();
spreadsheet.getRange('A2:A').copyTo(spreadsheet.getActiveRange(),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); 

var dupl = spreadsheet.getRange('E2:E').activate();
dupl.removeDuplicates();

spreadsheet.getRangeList(['A:A', 'E:E']).activate().setNumberFormat('@');

spreadsheet.getRange('D2').activate();
spreadsheet.getCurrentCell().setFormula('=if(E2="","",date(year(E2),month(E2),day(E2)))');
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('d2:d3001'), 
SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);

spreadsheet.getRange('F2').activate();
spreadsheet.getCurrentCell().setFormula('=iferror(TEXTJOIN("\n",true,QUERY($A$2:$B,"select B where A =\'"&E2&"\'")),"")');
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('F2:F3001'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('E2:F3001').activate().sort({column: 1, ascending: true});};

标签: google-apps-script

解决方案


您在sort()中指定的列号是指整个电子表格,而不是范围

换句话说, column1是 column A- 即使您的范围以E.

如果您想按列对范围进行排序E,请将您的请求修改为

spreadsheet.getRange('E2:F3001').sort({column: 5, ascending: true})

推荐阅读