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

하고 싶은 것 & 그 이유



외부 영업 아웃소스를 이용할 때 CRM과는 별도로 스프레드시트를 준비하여 위탁처에 공유한 스프레드시트에 활동 이력을 입력하여 행동 이력을 관리할 수 있을까 생각합니다. 다만, 그 경우 아래와 같은 스프레드시트로 관리하는 것이 아닐까요.



세로에 회사명이 늘어서 있어 옆에 1회째, 2회째라는 느낌으로 활동 이력이 늘어서 있는 이미지입니다.

덧붙여 SF에 활동 이력을 받아들일 때에는, 이하와 같은 형태로 CSV를 업로드 할 필요가 있어, 손으로 작업을 하려고 하면, 지옥과 같은 작업량이 됩니다.



이것을 어떻게든 자동화할 수 없을까 생각해, GAS로 스크립트를 작성.

구현 방법



1:대상 스프레드시트 취득
2 : 취득하고 싶은 시트의 이름을 지정하여 취득
3:2로 취득한 시트로 필요한 정보를 취득
4 : 전기하고 싶은 정보를 다른 스프레드 시트의 맨 마지막 행에 삽입

완성 시스템



그래서 완성형은 이하.

gas.js
function SalesforceImportMacro(){
  const SpreadSheet    = SpreadsheetApp.openById("スプレッドシートのID");
  var caldListSheet    = SpreadSheet.getSheetByName("営業管理シート");
  var caldListForMacro = SpreadSheet.getSheetByName("SF取り込み用シート");
  var ownerId          = "SFの所有者ID";
  var lastRow          = caldListSheet.getLastRow();

//活動履歴が記録されているシートのデータを配列で取得
  var data = caldListSheet.getDataRange().getValues(); 

  for(i = 1; i <= lastRow; i++){//行数の数に応じて繰り返し処理
    var columnNum  = 0; //下のFor分の処理が終わったら、columnNumを0にし、初期化
    for(num = 1; num <= 7; num++){
      var sfId        = data[i][0];
      var eventTitle  = data[i][9 + columnNum];//活動の件名を取得
      if(eventTitle == ""){//仮にeventTitleが空だったら処理を止めて次の処理へ
        break;
      }
      var startTime   = data[i][12 + columnNum];//開始時刻を取得
      var endTime     = data[i][13 + columnNum];//終了時刻を取得
      var description = data[i][15 + columnNum];//活動の詳細を取得

     //appendRowメソッドを使って、最終行に値を挿入する      
     caldListForMacro.appendRow([sfId,startTime,endTime,eventTitle,description,ownerId]);
      columnNum += 8; //8列毎に1回目、2回目、と並んでいるので、+8してあげる
    }
  }

var data = caldListSheet.getDataRange().getValues(); 내용



console.log(data);로 표시를 해 보면 data의 내용은 배열이 들어 있습니다. 그 후에는 반복 처리에 필요한 정보를 얻고 appendRow하고 있다는 것입니다.



출력



무사히 내고 싶은 형태로 아웃풋이 되고 있지만, 어쨌든 처리가 느린.



실은 원래, 이하와 같은 코드를 쓰고 있었지만, 처리가 너무 늦어서 끝날 때까지 넷플릭스를 보고 있었던 정도 w getValue의 양을 줄여, 꽤 빨라졌지만, 그래도 느린.

코드.gas
  for(i = 2; i <= lastRow; i++){
    var columnNum  = 0;
    for(num = 1; num <= 7; num++){
      var sfId        = caldListSheet.getRange(i,1).getValue();
      var eventTitle  = caldListSheet.getRange(i,10 + columnNum).getValue();
      if(eventTitle == ""){
        break;
      }
      var startTime   = caldListSheet.getRange(i,13 + columnNum).getValue();
      var endTime     = caldListSheet.getRange(i,14 + columnNum).getValue();
      var description = caldListSheet.getRange(i,16 + columnNum).getValue(); 
      caldListForMacro.appendRow([sfId,startTime,endTime,eventTitle,description,ownerId]);
      columnNum += 8;
    }
  }

appendRow는 매우 편리한 메소드이지만, 유석에 이것을 1,000회 이상 호출해 버리면, 시간이 걸린다. 좀 더, 좋은 알고리즘이 있을 것이므로, 찾아본다.

좋은 웹페이지 즐겨찾기