Javascript 我的脚本在执行时非常慢。请告诉我是什么使得这个脚本提供的结果非常慢
此脚本的目的是在填充列B单元格时,应在列A中填充今天的日期(仅当它为空时)。使用FOR循环在更改多个列B单元格时插入多个日期。我无法确定是什么使这个脚本变慢。自动日期填充需要10到15秒。请调整一下速度Javascript 我的脚本在执行时非常慢。请告诉我是什么使得这个脚本提供的结果非常慢,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,此脚本的目的是在填充列B单元格时,应在列A中填充今天的日期(仅当它为空时)。使用FOR循环在更改多个列B单元格时插入多个日期。我无法确定是什么使这个脚本变慢。自动日期填充需要10到15秒。请调整一下速度 //------------------------------------------------------------ //Auto-Populate date in Column A of when column B is updated //---------------------
//------------------------------------------------------------
//Auto-Populate date in Column A of when column B is updated
//------------------------------------------------------------
function onEdit(event) {
var eventRange = event.range;
if (eventRange.getColumn() == 2) { // 2 == column B
// getRange(row, column, numRows, numColumns)
var columnXRange = SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 1, eventRange.getNumRows(), 1);
var values = columnXRange.getValues();
if (values.length == 1) { // if active cell is 1, quickly insert date without loop
values[0][0] = new Date();
}
else {
for (var i = 0; i < values.length; i++) {
if (!values[i][0]) { // If cell isn't empty
values[i][0] = new Date();
//values.clearContent();
}
}
}
columnXRange.setValues(values);
}
}
//------------------------------------------------------------
//更新B列时自动填充A列中的日期
//------------------------------------------------------------
函数onEdit(事件){
var eventRange=event.range;
如果(eventRange.getColumn()==2){//2==B列
//getRange(行、列、numRows、numColumns)
var columnXRange=SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(),1,eventRange.getNumRows(),1);
var values=columnXRange.getValues();
如果(values.length==1){//如果活动单元格为1,则快速插入日期而不循环
值[0][0]=新日期();
}
否则{
对于(var i=0;i
功能OneEdit(e){
e、 source.toast(“条目”);
如果(e.range.columnStart==2){
var columnXRange=e.range.getSheet().getRange(e.range.rowStart,1,e.range.rowEnd-e.range.rowStart+1,1);
var values=columnXRange.getValues();
如果(值.length==1){
值[0][0]=新日期();
}否则{
对于(var i=0;i,因为您不需要每个单元格中的所有日期信息都不同,所以我会调用date函数一次,并将其存储在一个变量中供以后使用。这应该会加快代码的速度
例子:
//------------------------------------------------------------
//更新B列时自动填充A列中的日期
//------------------------------------------------------------
函数onEdit(事件){
var eventRange=event.range;
如果(eventRange.getColumn()==2){//2==B列
//getRange(行、列、numRows、numColumns)
var columnXRange=SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(),1,eventRange.getNumRows(),1);
var values=columnXRange.getValues();
/*只调用一次Date()*/
变量日期=新日期();
日期=日期.toString().拆分(“”).拼接(0,4).连接(“”);
如果(values.length==1){//如果活动单元格为1,则快速插入日期而不循环
数值[0][0]=日期;
}
否则{
对于(var i=0;i
脚本看起来非常不完善。为什么它要从columnXRange
读取值?无论如何,请添加预期结果的说明。包括一些示例输入和相应的结果通常有助于取消重新启动预期结果。@Shahul问题到底是什么?请阅读。您的int值是多少用触发器结束目标?@Arials:对不起,我是新加入论坛的。我已经更新了问题和正文中的代码。请帮助我。@Shahulhameed有一件事可以提高效率,那就是只调用new Date()
一次,如果你不需要分钟和秒的信息。你需要日期的所有信息吗?不,我不需要分钟和秒。嗨@Cooper,我仍然看到插入日期的延迟。延迟有多大?嗨@Aerals,我仍然看到插入日期的延迟。@Shahulhameed我们无法重现函数执行的速度。你你需要测试函数的执行时间。还有,你的工作表需要将日期输入多少行?我看到延迟了3秒。我刚刚复制了该文档。下面是链接。请自己尝试一次。如果可能,请帮助我。我测试了脚本。我想这是正常的执行时间。
function onEdit(e) {
e.source.toast('Entry');
if (e.range.columnStart == 2) {
var columnXRange = e.range.getSheet().getRange(e.range.rowStart,1,e.range.rowEnd-e.range.rowStart + 1,1);
var values = columnXRange.getValues();
if (values.length==1) {
values[0][0]=new Date();
}else {
for (var i=0;i<values.length;i++) {
if (!values[i][0]) {
values[i][0] = new Date();
}
}
}
columnXRange.setValues(values);
}
}