【问题标题】:Google Sheets Script to Rearrange Rows用于重新排列行的 Google 表格脚本
【发布时间】:2019-08-05 11:17:07
【问题描述】:

尝试创建一个允许使用下拉选择选项选择行优先级的 Google 表格。

这是我正在尝试构建的基本算法:

1 用户使用下拉菜单更改行的优先级(注意:该部分工作正常)

2 编辑后的行将根据新的优先级向上移动(注意:该部分工作正常)

3 所有其他行将根据编辑的单元格更改它们的数字(即,编辑的单元格最初是 13 并更改为 4。我希望旧的 4 变为 5,从 5 到 12 的所有内容都增加 1)

我遇到的问题是,当单元格更改为数字 4 时,它会低于旧数字 4 - 因此 for 循环不起作用。

有人做过类似的事情或有建议吗?

function onEdit(event) {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var editedCell = activeSheet.getActiveCell();


  var columnToSortBy = 1;
  var tableRange = "A2:M22";

  if(editedCell.getColumn() == columnToSortBy){
   var priority =  editedCell.getValue();
   var range = activeSheet.getRange(tableRange);
   var time = new Date();
    time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
   var nextCell = editedCell.offset(0, 13);
    nextCell.setValue(time);


   range.sort({ column: columnToSortBy, ascending: true});

  } 
}

function rearrangeRows() {
  var i;

  var ss = SpreadsheetApp.getActiveSheet();
  var startRow = 1;
  var endRow = ss.getLastRow();
  var getRange = ss.getDataRange();
  var getRow = getRange.getRow();

  var testPriority = 3;

  var cell = ss.getRange("A4");
  var cellValue = cell.getValue();
  if (cellValue > number) {
   Logger.log(cellValue);  
  }
  Logger.log(number);

 // for(i; i > )
}

【问题讨论】:

  • 与其只是在优先级改变时对范围进行排序,不如考虑在所需位置插入一行,将已编辑的行移动/复制到该行,删除旧行(如果需要,可能已经由于移动而消失),然后递增目标行位置(可从event.value 导出)和旧行位置(可从event.oldValue 导出)之间的所有行号的值。

标签: google-apps-script google-sheets google-apps google-sheets-formula


【解决方案1】:

我认为您可以在对电子表格进行排序之前将我在下面编写的代码放入 onEdit 函数中。这应该会增加优先级高于您刚刚设置的优先级的所有单元格的值,忽略您刚刚更改的单元格。当您降低行的优先级时,您可能需要稍微调整它以使其工作,因为您需要降低行的原始优先级和其新优先级之间的所有行的优先级。

var endRow = activeSheet.getLastRow();
for (var i = 1; i <= endRow; i ++) {
    var currentCell = activeSheet.getRange("A" + i);
    if (currentCell.getValue() > priority && i != editedCell.getRow()) {
         currentCell.setValue(currentCell.getValue() + 1)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2022-12-20
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多