【问题标题】:speed up copyto another Google sheets加快复制到另一个 Google 表格
【发布时间】:2021-11-20 08:04:57
【问题描述】:

我有一个复制行的代码,如果条件。 源表大约有 8 000 行,脚本因为太长而失败。

如何加快速度?

我希望它最多需要 1 小时。

我认为它给 Google 打了太多电话。我希望我们可以减少它们。

function  dispacthtosheets()  { 
var  sSheet  =  SpreadsheetApp.openById('xxxxxx');

var  srcSheet  =  sSheet.getSheetByName ( "Dispatch" );
var  lastRow  =  srcSheet.getLastRow ();***emphasized text***
for  ( var  i  =  1 ;  i  <=  lastRow ;  i ++ )  {
var  cellule  =  srcSheet.getRange ( "L"  +  i );
var  val  =  cellule.getValue();
if  ( val  ==  "Changement ENT" )  {
  var  tarSheet3  =  sSheet.getSheetByName ( "Changement ENT" );
  var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
  var  tarRow3   =  tarSheet3.getLastRow (); 
  var  tarRange3 =  tarSheet3.getRange ( "C"  +  tarRow3  +  ":R"  +  tarRow3);
  srcRange.copyTo (tarRange3);
  tarSheet3.insertRowAfter ( tarRow3 ); 
  }    if ( val  ==  "VC en REL" )  {
      var  tarSheet1  =  sSheet.getSheetByName ( "VC en REL" );
      var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
      var  tarRow1  =  tarSheet1.getLastRow (); 
      var  tarRange1  =  tarSheet1.getRange ( "C"  + tarRow1  +  ":R"  + tarRow1);
      srcRange.copyTo (tarRange1);
      tarSheet1.insertRowAfter ( tarRow1 );
  }    if  ( val  ==  "Solo à étudier" )  {
          var  tarSheet2  =  sSheet.getSheetByName ( "Solo à étudier" );
          var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
          var  tarRow2   =  tarSheet2.getLastRow (); 
          var  tarRange2 =  tarSheet2.getRange ( "C"  +  tarRow2 +  ":R"  +  tarRow2);
          srcRange.copyTo (tarRange2);
          tarSheet2.insertRowAfter ( tarRow2 );
  }  if ( val  ==  "VC + 6 mois" )  {
            var  tarSheet4  =  sSheet.getSheetByName ( "VC + 6 mois" );
            var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
            var  tarRow4  =  tarSheet4.getLastRow (); 
            var  tarRange4  =  tarSheet4.getRange ( "C"  + tarRow4  +  ":R"  + tarRow4);
            srcRange.copyTo (tarRange4);
            tarSheet4.insertRowAfter ( tarRow4);
  }    if  ( val  ==  "Sortie Nat" )  {
                var  tarSheet5  =  sSheet.getSheetByName ( "Sortie Nat" );
                var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
                var  tarRow5  =  tarSheet5.getLastRow (); 
                var  tarRange5  =  tarSheet5.getRange ( "C"  + tarRow5  +  ":R"  + tarRow5);
                srcRange.copyTo (tarRange5);   
                tarSheet5.insertRowAfter ( tarRow5 );
  }    if  ( val  ==  "ZCTM" )  {
                    var  tarSheet6  =  sSheet.getSheetByName ( "ZCTM" );
                    var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
                    var  tarRow6  =  tarSheet6.getLastRow (); 
                    var  tarRange6  =  tarSheet6.getRange ( "C"  + tarRow6  +  ":R"  + tarRow6);  
                    srcRange.copyTo (tarRange6);
                    tarSheet6.insertRowAfter ( tarRow6 );
  }   if  ( val  ==  "Appro validée" )  {
                        var  tarSheet7  =  sSheet.getSheetByName ( "Appro validée" );
                        var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );;
                        var  tarRow7  =  tarSheet7.getLastRow (); 
                        var  tarRange7  =  tarSheet7.getRange ( "C"  + tarRow7  +  ":R"  + tarRow7);
                        srcRange.copyTo (tarRange7);
                        tarSheet7.insertRowAfter ( tarRow7 );
  }   if  ( val  ==  "F943" )  {
                        var  tarSheet8  =  sSheet.getSheetByName ( "F943" );
                        var  srcRange  =  srcSheet.getRange ( "C"  +  i  +  ":R" +  i  );
                        var  tarRow8  =  tarSheet8.getLastRow (); 
                        var  tarRange8  =  tarSheet8.getRange ( "C"  + tarRow8  +  ":R"  + 
           tarRow8);
                        srcRange.copyTo (tarRange8);
                        tarSheet8.insertRowAfter ( tarRow8 );
                        }                                                                            
   sSheet.toast(' VC dispacthé !', 'Confirmation ????');
}
};

【问题讨论】:

  • 你必须限制脚本和工作表之间的对话,一次下载数据,然后在脚本中处理数据。在最小的电子表格上发布链接。见developers.google.com/apps-script/guides/support/best-practices
  • 嗨,迈克,感谢您的回答。这是我的工作表的简单副本:docs.google.com/spreadsheets/d/…。我不确定我能用你的谷歌指南链接做什么。谢谢
  • 我也是法国人,bienvenue。我很快就会看一下,只是函数dispacthtosheets,但我必须事先很好地理解你的复杂工作表。
  • 超级! je dispatche les lignes vers les feuilles en fonction de la Colonne L qui est ma 条件。太好了,我根据 culomn L 的值将线路发送到工作表。谢谢
  • 我找不到标签VC déjà présent

标签: performance get getvalue copyto


【解决方案1】:

一次归档完整的工作表

function archiver(){
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archive");
  var data = feuille.getRange('A2:AC'+(feuille.getLastRow()-1)).getValues()
  var archiveData = []
  var lignes = []
  var ligne = 1
  try{
    data.forEach(function(row){
      ligne++
      if (row[28]) {
        archiveData.push(row)
        lignes.push(ligne)
      }
    })
    archive.getRange(archive.getLastRow()+1,1,archiveData.length,archiveData[0].length).setValues(archiveData)
    lignes.reverse().forEach(x => feuille.deleteRow(x));
    SpreadsheetApp.getActive().toast('Ligne(s) archivée(s) !', 'Fin de script ?️')
    }catch(e){
      SpreadsheetApp.getActive().toast('Rien à archiver !', 'Fin de script ?️')
    }
}

【讨论】:

  • 老实人! c'est ça que je cherchais !非常感谢(再次)。
  • 向迈克致敬,je suis vraiment désolé。 J'espère que tu vas bien。 Encore merci pour tout。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
相关资源
最近更新 更多