Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数据复制并粘贴到下一个空行中_Javascript_Loops_Google Apps Script_Optimization_Google Sheets - Fatal编程技术网

Javascript 将数据复制并粘贴到下一个空行中

Javascript 将数据复制并粘贴到下一个空行中,javascript,loops,google-apps-script,optimization,google-sheets,Javascript,Loops,Google Apps Script,Optimization,Google Sheets,我有一个系统生成的电子表格,当订单号中有多个项目时,它会输入空白单元格。例如,如果订单1有三个项目,我将有三行完全填写,但只有一行有日期。标题如下所示: Order Number | User | Date | Item 我附加了一个样本数据集中的示例图像: 我尝试了下面的代码,该代码可以很好地完成任务,但我无法完成任务,因为每次运行脚本时执行都会超时(它会在第1000行左右停止)。我的电子表格大约有3000行,并且增长缓慢。我读了一些关于如何提高代码效率的说明,但对我来说,它已经非常有效了

我有一个系统生成的电子表格,当订单号中有多个项目时,它会输入空白单元格。例如,如果订单1有三个项目,我将有三行完全填写,但只有一行有日期。标题如下所示:

Order Number | User | Date | Item
我附加了一个样本数据集中的示例图像:

我尝试了下面的代码,该代码可以很好地完成任务,但我无法完成任务,因为每次运行脚本时执行都会超时(它会在第1000行左右停止)。我的电子表格大约有3000行,并且增长缓慢。我读了一些关于如何提高代码效率的说明,但对我来说,它已经非常有效了(至少与VBA相比)。 感谢您的帮助

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var last = sheet.getLastRow();// get last row number
 
  for (i = 2; i < last; i++) { 
    var info = sheet.getRange(i, 3);
    Logger.log(info);
 
    if (info.isBlank()) {
      var data = sheet.getRange(i-1, 3).getValues(); //copy value from cell above with date
      sheet.getRange(i, 3).setValues(data); //paste value on empty cell
    } 
  }
}
函数myFunction(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var last=sheet.getLastRow();//获取最后一行号
对于(i=2;i
问题在于
getRange
和其他类似的电子表格服务(
Class SpreadsheetApp
)速度“非常”慢

使用
getDataRange()
然后
getValues()
在包含所有数据范围值的数组上迭代,一次读取整个数据范围,而不是每次
读取一个范围

相关的


    • 问题在于
      getRange
      和其他类似的电子表格服务(
      Class SpreadsheetApp
      )速度“非常”慢

      使用
      getDataRange()
      然后
      getValues()
      在包含所有数据范围值的数组上迭代,一次读取整个数据范围,而不是每次
      读取一个范围

      相关的


      我认为您出现问题的原因是循环中使用了
      getValues
      setValues
      。这样,工艺成本就会很高。这一点我已经提过了。因此,为了降低成本,在您的情况下,如何使用以下流程进行修改

    • 使用
      getValues
      从列“C”中检索值
    • 创建用于将值放入电子表格的数组
    • 使用
      setValues
      将创建的数组放入电子表格
    • 当上述流程反映到脚本中时,它将变成如下所示

      修改脚本: 参考资料:

      我认为您出现问题的原因是循环中使用了
      getValues
      setValues
      。这样,工艺成本就会很高。这一点我已经提过了。因此,为了降低成本,在您的情况下,如何使用以下流程进行修改

    • 使用
      getValues
      从列“C”中检索值
    • 创建用于将值放入电子表格的数组
    • 使用
      setValues
      将创建的数组放入电子表格
    • 当上述流程反映到脚本中时,它将变成如下所示

      修改脚本: 参考资料:
      试试这个:

      function myFunction() {
        var ss=SpreadsheetApp.getActive();
        var sh=ss.getActiveSheet()
        var shsr=2;//data start row
        var vs=sh.getRange(shsr,3,sh.getLastRow()-shsr+1,1).getValues();
        vs.forEach(function(r,i){if(!r[0]){vs[i][0]=vs[i-1][0];}});
        sh.getRange(shsr,3,sh.getLastRow()-shsr+1,1).setValues(vs);
      }
      
      试试这个:

      function myFunction() {
        var ss=SpreadsheetApp.getActive();
        var sh=ss.getActiveSheet()
        var shsr=2;//data start row
        var vs=sh.getRange(shsr,3,sh.getLastRow()-shsr+1,1).getValues();
        vs.forEach(function(r,i){if(!r[0]){vs[i][0]=vs[i-1][0];}});
        sh.getRange(shsr,3,sh.getLastRow()-shsr+1,1).setValues(vs);
      }
      

      我认为,当针对OP的情况提出一个示例修改脚本时,它可能有助于理解修改点。因此,我建议将其作为几个修改之一。谢谢您的评论@Tanaike。当已经有很多类似的问题并且OP没有简要描述他们的搜索/研究工作时,我很犹豫是否要这么做。无论如何,我很高兴你贴出了答案:)谢谢你的回复。我能理解。我认为,当用户能够获得解决用户问题的方向时,可能会导致作为用户的教育。所以我提出了这个建议。当然,当我能找到解决这个问题的清晰的重复问题时,我会建议把它转介给你。鲁本,谢谢你的材料。我要读你贴的文章。事实上,我对javascript和Google Sheets(通常对小任务使用一些Python或VBA)还不熟悉,我不知道
      getRange
      和其他电子表格服务背后的缓慢过程。我试图搜索类似的问题,但发现自己正在阅读关于提高代码效率的文章,这对新用户来说是一个很大的进步。我认为,当针对OP的情况提出一个修改脚本示例时,可能有助于了解修改点。因此,我建议将其作为几个修改之一。谢谢您的评论@Tanaike。当已经有很多类似的问题并且OP没有简要描述他们的搜索/研究工作时,我很犹豫是否要这么做。无论如何,我很高兴你贴出了答案:)谢谢你的回复。我能理解。我认为,当用户能够获得解决用户问题的方向时,可能会导致作为用户的教育。所以我提出了这个建议。当然,当我能找到解决这个问题的清晰的重复问题时,我会建议把它转介给你。鲁本,谢谢你的材料。我要读你贴的文章。事实上,我对javascript和Google Sheets(通常对小任务使用一些Python或VBA)还不熟悉,我不知道
      getRange
      和其他电子表格服务背后的缓慢过程。我试着搜索类似的问题,但发现自己读到了关于提高代码效率的文章,这对新用户来说是一大步。它工作得非常好!谢谢你的参考资料。@Haddocks谢谢你的回复。我很高兴你的问题得到了解决。它工作得很好!谢谢你的参考资料。@Haddocks谢谢你