Javascript 代码运行太慢
我正在尝试运行一个代码,将值从一个电子表格复制到另一个电子表格,但是将其作为数组的顺序不同。在某些情况下,它还会打印“未知”,在某些情况下,它还会格式化某些单元格。然而,它让很多时间来完成。有什么办法可以改进吗Javascript 代码运行太慢,javascript,optimization,google-apps-script,google-sheets,copy,Javascript,Optimization,Google Apps Script,Google Sheets,Copy,我正在尝试运行一个代码,将值从一个电子表格复制到另一个电子表格,但是将其作为数组的顺序不同。在某些情况下,它还会打印“未知”,在某些情况下,它还会格式化某些单元格。然而,它让很多时间来完成。有什么办法可以改进吗 function move() { var sss = SpreadsheetApp.openById('xx'); var sourceSheet = sss.getSheetByName('CJ_Products'); var destinationSheet = ss
function move() {
var sss = SpreadsheetApp.openById('xx');
var sourceSheet = sss.getSheetByName('CJ_Products');
var destinationSheet = sss.getSheetByName('Product2');
var lastRow = sourceSheet.getRange(sourceSheet.getLastRow(), 1,1,1).getRow()
var i = 1
while(i<=lastRow){
var rowInt = destinationSheet.getRange(destinationSheet.getLastRow()+1, 4,1,1).getRow() //get row number
destinationSheet.getRange('A' + rowInt).setFormula('=Month(D'+rowInt+')')
destinationSheet.getRange('B' + rowInt).setFormula('=Weekday(D'+rowInt+')')
destinationSheet.getRange('C' + rowInt).setFormula('=Day(D'+rowInt+')')
destinationSheet.getRange('D' + rowInt).setValue(sourceSheet.getRange('A'+i).getValues()) //move from the source to destination
destinationSheet.getRange('E' + rowInt+':F'+rowInt).setValue('Unknown') //set to Unknown
destinationSheet.getRange('H' + rowInt+':J'+rowInt).setValue('Unknown')
destinationSheet.getRange('J' + rowInt).setValue('CJ')
destinationSheet.getRange('K' + rowInt).setValue(sourceSheet.getRange('B' +i).getValues())
destinationSheet.getRange('L' + rowInt).setValue(sourceSheet.getRange('E' +i).getValues())
destinationSheet.getRange('M' + rowInt).setValue(sourceSheet.getRange('F' +i).getValues())
destinationSheet.getRange('N' + rowInt).setValue(sourceSheet.getRange('J' +i).getValues())
destinationSheet.getRange('S' + rowInt).setValue(sourceSheet.getRange('G' +i).getValues())
destinationSheet.getRange('T' + rowInt).setValue(sourceSheet.getRange('H' +i).getValues())
destinationSheet.getRange('O' + rowInt).setFormula('=S'+rowInt+'*GOOGLEFINANCE("currency:EURUSD")')
destinationSheet.getRange('P' + rowInt).setFormula('=T'+rowInt+'*GOOGLEFINANCE("currency:EURUSD")')
destinationSheet.getRange('Q' + rowInt).setFormula('=P'+rowInt+'/T'+rowInt)
destinationSheet.getRange('O' + rowInt+':Q'+rowInt).setNumberFormat('0.00$')
i = i+1
}
}
应优化代码: 所有的计算都在一个循环中进行 使用getValue和setValue,而不是更快的函数getValue和setValue 与此相反,请将循环集中于执行单个调用: var rowInt=destinationSheet.getRangedestinationSheet.getLastRow+1,4,1,1.getRow 尝试找出如何找到循环外的第一行,然后增加此值:
var rowStart = destinationSheet.getRange(destinationSheet.getLastRow()+1, 4,1,1).getRow();
for (var row = rowStart; row <= lastRow, row++)
{
// some code...
}
使用数组,然后将数组中的值复制到范围中:
var formulas = [];
for (var row = rowStart; row <= lastRow, row++)
{
// some code...
formulas.push(['=Month(D'+ row + ')']);
}
var rangeToPateFormulas = destinationSheet.getRange('A' + rowStart + ':A' + lastRow);
rangeToPateFormulas.setFormulas(formulas);
等等。请参阅更多信息:
不要在问题标题中强行添加标签。