gpt4 book ai didi

javascript - 优化Google应用程序脚本以实现自动增量列

转载 作者:行者123 更新时间:2023-12-02 22:45:45 25 4
gpt4 key购买 nike

有两种方法可以添加自动增量列。通过自动递增,我的意思是如果 B 列有值,A 列将增加一个基于前一行值递增的数值。

第一种方法很简单,即将如下公式粘贴到我的第一列中:

=IF(ISBLANK(B1),,IF(ISNUMBER(A1),A1,0)+1)

我完成此操作的第二种方法是通过 GA 脚本。然而我发现使用 GA 脚本的性能要慢得多并且容易出错。例如,如果我按顺序将值快速粘贴到单元格 b1 到 b10 中,它有时会重置计数,并为某些行再次从 1 开始。这是因为尚未计算前几行的值。我认为这是因为 GA 脚本可能是异步并行运行的。我的问题是..有没有办法确保每次发生更改时,该脚本的执行都会排队并按顺序执行?
或者,我应该编写这个脚本来优化它吗?

function auto_increment_col() {
ID_COL = 1;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

//only increment column 1 for sheets in this list
var auto_inc_sheets = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("auto_inc_sheets").getValues();
auto_inc_sheets = auto_inc_sheets.map(function(row) {return row[0];});
var is_auto_inc_sheet = auto_inc_sheets.indexOf(spreadsheet.getSheetName()) != -1;
if (!is_auto_inc_sheet) return;

var worksheet = spreadsheet.getActiveSheet();
var last_row = worksheet.getLastRow();
var last_inc_val = worksheet.getRange(last_row, ID_COL).getValue();

//if auto_inc column is blank and the column next to auto_inc column (col B) is not blank, then assume its a new row and increment col A
var is_new_row = last_inc_val == "" && worksheet.getRange(last_row, ID_COL+1).getValue() != "";
Logger.log("new_row:" + is_new_row + ", last_inc_val:" + last_inc_val );
if (is_new_row) {
var prev_inc_val = worksheet.getRange(last_row-1, ID_COL).getValue();
worksheet.getRange(last_row, ID_COL).setValue(prev_inc_val+1);
}
}

最佳答案

这是我对自动增量的愿景https://github.com/contributorpw/google-apps-script-snippets/tree/master/snippets/spreadsheet_autoincrement

这个的主要功能是

/**
*
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet
*/
function autoincrement_(sheet) {
var data = sheet.getDataRange().getValues();
if (data.length < 2) return;
var indexCol = data[0].indexOf('autoincrement');
if (indexCol < 0) return;
var increment = data.map(function(row) {
return row[indexCol];
});
var lastIncrement = Math.max.apply(
null,
increment.filter(function(e) {
return isNumeric(e);
})
);

lastIncrement = isNumeric(lastIncrement) ? lastIncrement : 0;
var newIncrement = data
.map(function(row) {
if (row[indexCol] !== '') return [row[indexCol]];
if (row.join('').length > 0) return [++lastIncrement];
return [''];
})
.slice(1);
sheet.getRange(2, indexCol + 1, newIncrement.length).setValues(newIncrement);
}

但是您必须打开代码片段才能了解详细信息,因为如果没有锁,这将无法工作。

关于javascript - 优化Google应用程序脚本以实现自动增量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58405672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com