Google apps script 创建后期编辑功能

Google apps script 创建后期编辑功能,google-apps-script,google-sheets,google-apps-script-editor,Google Apps Script,Google Sheets,Google Apps Script Editor,我目前使用onEdit功能来帮助对工作表进行排序。表格在a列输入值时进行排序,但我更希望表格在a-F列中的所有值都输入后进行排序,因为我缺乏编码知识,我需要这方面的帮助 var SORT_COLUMN_INDEX = 2; var ASCENDING = true; var NUMBER_OF_HEADER_ROWS = 1; var activeSheet; function autoSort(sheet) { var range = sheet.getDataRange();

我目前使用
onEdit
功能来帮助对工作表进行排序。表格在a列输入值时进行排序,但我更希望表格在a-F列中的所有值都输入后进行排序,因为我缺乏编码知识,我需要这方面的帮助

var SORT_COLUMN_INDEX = 2;
var ASCENDING = true;
var NUMBER_OF_HEADER_ROWS = 1;

var activeSheet;

function autoSort(sheet) {
  var range = sheet.getDataRange();

  if (NUMBER_OF_HEADER_ROWS > 0) {
    range = range.offset(NUMBER_OF_HEADER_ROWS, 0);
  }
  range.sort( {
    column: SORT_COLUMN_INDEX,
    ascending: ASCENDING
  } );
}
function onEdit(event) {
  var editedCell;
  activeSheet = SpreadsheetApp.getActiveSheet();
  editedCell = activeSheet.getActiveCell();
  if (editedCell.getColumn() == SORT_COLUMN_INDEX) {
    autoSort(activeSheet);
  }
}

function onOpen(event) {
  activeSheet = SpreadsheetApp.getActiveSheet();
  autoSort(activeSheet);
}

function onInstall(event) {
  onOpen(event);
}
您需要两个列索引
  • 一种
    SORT\u COLUMN\u INDEX
    ,指定表格应按哪一列进行排序和排序
  • 一个
    TRIGGER\u COLUMN\u INDEX
    ,指定在编辑哪一列
    函数autoSort
    后调用
您可以按以下方式修改代码:

var SORT_COLUMN_INDEX = 1;
var TRIGGER_COLUMN_INDEX = 6;
var ASCENDING = true;
var NUMBER_OF_HEADER_ROWS = 1;

var activeSheet;

function autoSort(sheet) {
  var range = sheet.getDataRange();

  if (NUMBER_OF_HEADER_ROWS > 0) {
    range = range.offset(NUMBER_OF_HEADER_ROWS, 0);
  }
  range.sort( {
    column: SORT_COLUMN_INDEX,
    ascending: ASCENDING
  } );
}
function onEdit(event) {
  var editedCell;
  activeSheet = SpreadsheetApp.getActiveSheet();
  editedCell = activeSheet.getActiveCell();
  if (editedCell.getColumn() == TRIGGER_COLUMN_INDEX)  {
    Logger.log('column '+editedCell.getColumn()+' edited');
 autoSort(activeSheet);
  }
  else{
    Logger.log('other column edited');
  }
}

function onOpen(event) {
  activeSheet = SpreadsheetApp.getActiveSheet();
  autoSort(activeSheet);
}

//Sure that you need the following function?
function onInstall(event) {
  onOpen(event);
}

您的代码可以重写为
函数onEdit(e){if(e.range.columnStart==SORT_COLUMN_INDEX){autoSort(e.range.getSheet();}}
任何列都可以为空吗?并且仍然被认为是进入的。在转到另一行之前,是否计划完整地输入每一行的列?欢迎。我突然想到两种可能性。1) 在B-F列中输入数据后,在A列中输入数据。2)使用A-F列以外的单元格触发排序;e、 例如,标题行中的复选框。请共享该电子表格的副本。
getActiveCell()
并非总能正常工作,我建议您使用事件对象:
editedCell=event.range
然后您只需要定义
SORT_COLUMN_INDEX=6
,前提是您希望函数在输入F列后运行。感谢所有人的回答:Tedinoz-我可以这样做,但非常不切实际(我还担心由于工作表中的内容,我无法共享),Cooper&ziganotschka我试过你们两个,但我得到一个错误:TypeError:无法从undefined读取属性“range”。(第48行,文件“代码”-不确定您是否可以在这方面提供帮助?我不知道是否还有更多代码需要输入以定义“范围”?“我还担心,由于工作表中的内容,我无法共享”@Gav您严重限制了用户帮助您解决此问题的能力。没有人希望您包含私人或机密信息,也没有人希望您共享您的“原始”电子表格。副本可以,您可以编辑数据以使其通用。但是数据字段和类型、布局以及代码都是无限的帮助用户的NSE值——如果您选择不共享,则有关闭支持途径的风险。很高兴听到。如果我的答案解决了您的问题,如果您考虑将其标记为“接受”,我将不胜感激。