【영업용】매크로의 실행 속도를 100배 정도 빨리 할 수 있었으므로 망비록
7270 단어 GoogleAppsScriptgas
하고 싶은 것 & 그 이유
이전, 이하의 기사에서, SF용의 캡쳐용 포맷으로 성형하는 스크립트를 작성했지만, 어쨌든 처리가 느려, 처리중에 넷플릭스를 보고 여가 부딪쳤던 정도이므로, 이 프로그램을 고속으로 할 수 없는지, 라고 생각하고 있었다.
【영업용】스프레드 시트에 기록한 행동 관리 시트를 SF의 취입용 포맷으로 성형한다
↑이것을↓ 이런 느낌으로 성형하는 매크로인데, 여러가지 모색한 결과 100배 정도 빨리 할 수 있었습니다.
구현 방법
1:대상 스프레드시트 취득
2 : 취득하고 싶은 시트의 이름을 지정하여 취득
3:2로 취득한 시트에 있는 정보를 정리해 취득
4 : 3으로 정리하여 취득한 정보를 반복 처리를 이용하여 배열을 생성
5:setValues로 정리해 출력
완성 시스템
그래서 완성형은 이하.
gas.jsfunction 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);
프로그램은 단지 움직이면 좋다고 생각하고 있었지만, 알고리즘을 개선해, 필요 최소한의 코드량으로 하면 이렇게 빨라지는 것인지 실감.
데이터 구조와 알고리즘을 진지하게 배우고 싶다.
Reference
이 문제에 관하여(【영업용】매크로의 실행 속도를 100배 정도 빨리 할 수 있었으므로 망비록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirokobe26/items/ada8918c1bc1df081ee8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1:대상 스프레드시트 취득
2 : 취득하고 싶은 시트의 이름을 지정하여 취득
3:2로 취득한 시트에 있는 정보를 정리해 취득
4 : 3으로 정리하여 취득한 정보를 반복 처리를 이용하여 배열을 생성
5:setValues로 정리해 출력
완성 시스템
그래서 완성형은 이하.
gas.jsfunction 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);
프로그램은 단지 움직이면 좋다고 생각하고 있었지만, 알고리즘을 개선해, 필요 최소한의 코드량으로 하면 이렇게 빨라지는 것인지 실감.
데이터 구조와 알고리즘을 진지하게 배우고 싶다.
Reference
이 문제에 관하여(【영업용】매크로의 실행 속도를 100배 정도 빨리 할 수 있었으므로 망비록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirokobe26/items/ada8918c1bc1df081ee8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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);
프로그램은 단지 움직이면 좋다고 생각하고 있었지만, 알고리즘을 개선해, 필요 최소한의 코드량으로 하면 이렇게 빨라지는 것인지 실감.
데이터 구조와 알고리즘을 진지하게 배우고 싶다.
Reference
이 문제에 관하여(【영업용】매크로의 실행 속도를 100배 정도 빨리 할 수 있었으므로 망비록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirokobe26/items/ada8918c1bc1df081ee8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)