Google apps script 是否有一个Google Apps脚本函数,告诉脚本在填充特定列后运行?
我正在创建一个脚本来自动对行进行排序,但我不希望在填充该行中的所有单元格之前移动这些行 我有以下代码:Google apps script 是否有一个Google Apps脚本函数,告诉脚本在填充特定列后运行?,google-apps-script,Google Apps Script,我正在创建一个脚本来自动对行进行排序,但我不希望在填充该行中的所有单元格之前移动这些行 我有以下代码: SHEET_NAME = "New"; SORT_DATA_RANGE = "A2:M999"; SORT_ORDER = [ {column: 2, ascending: true}, // 3 = column number, sorting by descending order {column: 1, ascending: true}, // 1 = column number,
SHEET_NAME = "New";
SORT_DATA_RANGE = "A2:M999";
SORT_ORDER = [
{column: 2, ascending: true}, // 3 = column number, sorting by
descending order
{column: 1, ascending: true}, // 1 = column number, sort by ascending
order
];
function onEdit(e){
multiSortColumns();
}
function multiSortColumns(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEET_NAME);
var range = sheet.getRange(SORT_DATA_RANGE);
range.sort(SORT_ORDER);
ss.toast('Sort complete.');
}
但是,只要填充第2列,行就会排序,然后才能填充第3-13列
我希望在填充所有其他列后对行进行排序。您希望在单元格B2上使用OneEdit触发器对列进行排序,但前提是第2行第3列到第13列中的单元格已经填充 以下回答说明了仅在满足某些条件时执行排序所需的逻辑。这其中有几个关键要素:
- 使用-它使生活更轻松
- 获取第2行第3列到第13列的数据(
),以便在循环中对其进行计算editedsheet.getRange(editedRow,3,1,11).getValues();
- 如果#1:测试编辑的单元格是否为B2(
)IF(editedRow==2&&editedCol==2){
- 如果是,则遍历值范围(
)for(var i=0;i0){
- 如果确定,则返回循环中的下一项
- 如果不正常,则使用
return;
- 如果你到了if#1的末尾,那么就进行排序
函数onEdit(e){ //so5856469701 var ss=SpreadsheetApp.getActiveSpreadsheet(); //获取已编辑的变量 var editedCell=e.range; var editedRow=editedCell.getRow(); var editedCol=editedCell.getColumn(); var editedsheet=ss.getSheetByName(e.source.getSheetName()); //Logger.log(“DEBUG:Cell=“+editedCell.getA1Notation()+”,row=“+editedRow+”,column=“+editedCol”) //获取编辑行第3列至第13列的数据 var rowdata=editedsheet.getRange(editedRow,3,1,11).getValues(); //仅当编辑的单元格为B2时才执行操作 如果(editedRow==2&&editedCol==2){ //log(“调试:编辑的单元格位于正确的行或列中。继续处理”); //循环遍历数据范围 对于(var i=0;i0 //如果dat范围内的值>0,则 如果(rowdata[0][i]>0{ //Logger.log(“调试:大于零”); }否则{ log(“调试:列“+(+i+1)+”中的值不大于零;脚本中止”); 返回; } } log(“通过if;现在运行排序”); //为了达到这个目的,第3列到第13列中的所有单元格都有值,因此可以继续排序 //插入排序代码 }否则{ log(“调试:编辑的单元格不在正确的行或列中”); } }
将在工作表编辑时运行,如果您不希望在每次需要检查脚本中要编辑的某一行或手动运行时自动触发它。如果某些行已完全填充,而某些行未完全填充,您希望怎么做?是否仅当范围中的所有行都已完全填充时才进行排序还是应该对完全填充的文件进行排序,而忽略不完整的文件或将其置于其他文件之下?onEdit()
function onEdit(e) { //so5856469701 var ss = SpreadsheetApp.getActiveSpreadsheet(); // get edited variables var editedCell = e.range; var editedRow = editedCell.getRow(); var editedCol = editedCell.getColumn(); var editedsheet = ss.getSheetByName(e.source.getSheetName()); // Logger.log("DEBUG: Cell = "+editedCell.getA1Notation()+", row = "+editedRow+", column = "+editedCol) //get the data from columns 3 to 13 for the edited row var rowdata = editedsheet.getRange(editedRow,3,1,11).getValues(); //do stuff ONLY if the edited cell was B2 if (editedRow == 2 && editedCol == 2){ // Logger.log("DEBUG: edited cell was in the right row or column. Continue processing"); //loop through the data range for (var i=0;i<rowdata[0].length;i++){ // Logger.log("DEBUG: value = "+rowdata[0][i]); // assumes data is numeric, otheriwse test for .length>0 // if the value in the dat range >0, then if (rowdata[0][i] > 0){ // Logger.log("DEBUG: greater than zero"); }else{ Logger.log("DEBUG: value in column "+(+i+1)+" is NOT greater than zero; script abort"); return; } } Logger.log("got through the if; now run the sort"); // to get this far, all the cells in columns 3 to 13 have values so the sort can proceed // insert sort code }else{ Logger.log("DEBUG: edited cell wasnt in the right row or column"); } }
- 如果是,则遍历值范围(