2016-10-07 7 views
0

나는 (이 스프레드 시트와 연관되지 않으며, 관련이없는 이유가 될 수 없음) 스프레드 시트를 읽는 가스 웹 응용 프로그램에서 일하고 있어요.속도까지 Google 웹 앱 스프레드 시트 로딩

나는 다음과 같이 범위 그 시트에로드하거나 :

var ss = SpreadsheetApp.openById(ssId); 
dataSheet = ss.getSheetByName('Projects'); 
var data = dataSheet.getRange('A1:BL').getValues(); 

내가 테스트의 많은 일을하고, 내 가볍게 채워 A1로했습니다 BL5500 스프레드 시트를 (의 공정한 번호 셀에 수십 자의 텍스트가 채워짐)로드 시간은 약 6 초 정도 걸립니다. 명명 된 범위와 많은 것들을 시도했지만 그보다 빨리 가져올 수는 없습니다. 정말 필요한 것은

는 내가 필요로하는 행을 찾을 수있는 검색을 수행하고 내가 그 행을 필요 시트 1 열입니다. 그러나 1 열을로드하는 것은 전체를로드하는 것과 거의 동일한 시간이 걸립니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 지연은 문제가됩니다. 비교를 위해

SpreadsheetApp.openById(ssid) [0.174 seconds] 
Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A1:BL]) [0.387 seconds] 
Range.getValues() [6.483 seconds] 

, 여기에 하나의 열을로드하는 것 :

여기 타이밍 고장의

SpreadsheetApp.openById(ssid) [0.164 seconds] 
Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A1:A]) [0.336 seconds] 
Range.getValues() [5.887 seconds] 

이 단지 하나의 실행은, 시간 차이는 (그들은 다름) 중요하지 않다.

+0

해결 방법 : 새로운 시트를 만들었습니다. 그 중 하나의 열은 검색해야하는 열과 같습니다. 나는 그것을로드. 검색을 완료하면 전체 시트에서 관련 행만로드합니다. 총 시간은 약 8 초에서 약 2 초가 걸릴 수 있습니다. – KeithKeithBoBeith

+0

이 해결책을 답으로 추가하십시오. –

+0

또한 ss의 게시 된 csv를 구문 분석하면 훨씬 빠르다는 것을 알았습니다. –

답변

0

위에서 언급 한 것처럼 나는 다른 사람들에게 도움이 될만한 대답을 발견했습니다. 두 번째 시트 ("ProjectIndex")를 만들고 "Projects"에서 해당 칼럼을 가리키는 두 개의 칼럼을 설정했습니다 (원래는 한 칼럼을 검색하여 간단하게 유지한다고 말했었습니다 : 사실 두 명을 찾고 있습니다.) 해당 데이터를로드하고 관심 행을 찾은 다음 "프로젝트"로 돌아가서 원하는 행만로드합니다.

var ss = SpreadsheetApp.openById(ssId); 
dataSheet = ss.getSheetByName('ProjectIndex'); 
var data = dataSheet.getRange('A1:B').getValues(); 

... // search data and find row i 

var j = i+1; // account for zero-based array but 1-based row numbering 
var rc = 'A'+j+':BL'+j; // there are BL columns in Projects 
var record = ss.getSheetByName('Projects').getRange(rc).getValues(); 

시간 ProjectIndex를로드 :

SpreadsheetApp.openById(ssid) [0.153 seconds] 
Spreadsheet.getSheetByName([ProjectIndex]) [0 seconds] 
Sheet.getRange([A1:B]) [0.282 seconds] 
Range.getValues() [0.504 seconds] 

시간을 프로젝트의 한 행로드 :

Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A4785:BL4785]) [0.513 seconds] 
Range.getValues() [0.352 seconds] 

내가 의도적으로 파일의 아래쪽 행으로 설명합니다. 그것은 일찍 비동기 적으로 ProjectIndex를로드 할 수있는 것일 수 있습니다. 일을 더 빠르게 할 수 있을지, 어쨌든 그것을 수행하는 방법을 모르는지 나는 알지 못합니다. 이후의 검색은 원칙적으로 데이터가 최신인지에 대해 확실하지 않은 경우를 제외하고는 빠릅니다.