【영업용】매크로의 실행 속도를 100배 정도 빨리 할 수 ​​있었으므로 망비록

7270 단어 GoogleAppsScriptgas

하고 싶은 것 & 그 이유



이전, 이하의 기사에서, SF용의 캡쳐용 포맷으로 성형하는 스크립트를 작성했지만, 어쨌든 처리가 느려, 처리중에 넷플릭스를 보고 여가 부딪쳤던 정도이므로, 이 프로그램을 고속으로 할 수 없는지, 라고 생각하고 있었다.

【영업용】스프레드 시트에 기록한 행동 관리 시트를 SF의 취입용 포맷으로 성형한다



↑이것을↓ 이런 느낌으로 성형하는 매크로인데, 여러가지 모색한 결과 100배 정도 빨리 할 수 ​​있었습니다.



구현 방법



1:대상 스프레드시트 취득
2 : 취득하고 싶은 시트의 이름을 지정하여 취득
3:2로 취득한 시트에 있는 정보를 정리해 취득
4 : 3으로 정리하여 취득한 정보를 반복 처리를 이용하여 배열을 생성
5:setValues로 정리해 출력

완성 시스템



그래서 완성형은 이하.

gas.js
function SalesforceImportMacro(){
  const SpreadSheet    = SpreadsheetApp.openById("スプレッドシートID");
  var caldListSheet    = SpreadSheet.getSheetByName("コールドコールリスト");
  var caldListForMacro = SpreadSheet.getSheetByName("出力先シート");
  var ownerId          = "SFオーナーId";
  var lastRow          = caldListSheet.getLastRow();

  var data             = caldListSheet.getDataRange().getValues();
  var arrForMacro      = [];

  for(i = 1; i <= lastRow - 1; i++){
    var columnNum  = 0;
    for(num = 1; num <= 7; num++){
      var check = data[i][9 + columnNum];
      if(check == ""){
        break;
      }else{
        arrForMacro.push([data[i][0],data[i][12 + columnNum],data[i][13 + columnNum],data[i][9 + columnNum],data[i][15 + columnNum],ownerId]);
        columnNum += 8;
      }
    }
  }


  caldListForMacro.getRange(2,1,tenkisaki.length,6).setValues(arrForMacro);

}

개선점



알고리즘의 개선도 실시해, 메소드를 호출하는 양을 가능한 한 적게 했지만, 제일은 setValues()가 어쨌든 우수하다 w
지금까지는 appendRow()를 for분 안에서 몇번이나 부르는 것으로 최종행에 데이터를 삽입하고 있었지만, setValues()의 인수에, 배열을 건네주면 정리해 데이터를 세트 해 준다 그래서 속도는 100배 이상 빠르고, 게다가 코드의 양을 짧게 할 수 있었다.
  var arrForMacro      = [];

  for(i = 1; i <= lastRow - 1; i++){
    var columnNum  = 0;
    for(num = 1; num <= 7; num++){
      var check = data[i][9 + columnNum];
      if(check == ""){
        break;
      }else{
        arrForMacro.push([data[i][0],data[i][12 + columnNum],data[i][13 + columnNum],data[i][9 + columnNum],data[i][15 + columnNum],ownerId]);
        columnNum += 8;
      }
    }
  }


  caldListForMacro.getRange(2,1,tenkisaki.length,6).setValues(arrForMacro);

프로그램은 단지 움직이면 좋다고 생각하고 있었지만, 알고리즘을 개선해, 필요 최소한의 코드량으로 하면 이렇게 빨라지는 것인지 실감.
데이터 구조와 알고리즘을 진지하게 배우고 싶다.

좋은 웹페이지 즐겨찾기