2016-09-08 2 views
0

유스 케이스가 있고 처음 네 행의 Google 스프레드 시트를 가져 오려고합니다. 공개적으로 게시되어 웹 페이지에 표시됩니다.GAE에서 80K 행 이상 7 열 이상을 포함하는 Google 스프레드 시트의 첫 번째 네 행만 가져 오는 방법 (Java 사용)

행 수가 1000 인 스프레드 시트의 경우에는 문제가 없습니다. 그러나 80K 이상의 행에있는 스프레드 시트의 경우 항상 타임 아웃 예외가 발생합니다.

Unable to complete the HTTP request when using SpreadSheet API

및 제한 시간을 사용 시간 제한을 재 시도했지만, 무한 루프에 갈 것 같다

나는 내 우려 유사했다 발견이 링크를 언급했다.

"ListFeed"를 사용하고 있습니다. ListFeed가 전체 스프레드 시트를로드하기 때문에 응용 프로그램이로드하는 데 더 많은 시간이 걸릴 수 있습니까?

내 웹 응용 프로그램에 전체 스프레드 시트가 아닌 처음 4-5 행만 가져와야하는 대체 솔루션이 있습니까?

제안하고 조언하십시오.

  1. 시간 제한 및 재 시도 :

    ListFeed lf = null; 
    while (timeoutflag != 1) { 
        try { 
         lf = service.getFeed(url, ListFeed.class); 
         timeoutflag = 1; 
        } catch (RuntimeException e) { 
         timeoutinc += 2; 
         service.setConnectTimeout(timeoutinc * 3000); 
         service.setReadTimeout(timeoutinc * 3000); 
        } 
    } 
    
  2. 가져 오기 행 :

    for (int k = 0; k < 5; k++) { 
        ListEntry le = lf.getEntries().get(k); 
        CustomElementCollection cec = le.getCustomElements(); 
        for (int j = 0; j < colcount; j++) { 
         resp.getWriter().println("<td>"); 
         resp.getWriter().println(cec.getValue(colname[j])); 
         resp.getWriter().println("</td>"); 
        } 
    } 
    

답변

1

이 문제에 대한 해결책이 확인되었습니다. 이 솔루션은에 있었다

lf = service.getFeed(url, ListFeed.class); //Thus there used to be connection sometimes and also memory overflow exceptions in case of larger spreadsheets. 

: 문제는 피드, 내 코드에서, 목록 피드 변수의 모든 스프레드 시트를 저장하는 데 많은 시간과 메모리를 스프레드 시트에 연결하는 데 필요한 때문에 목록의 사용이었다 셀 기반 피드를 사용하십시오. 스프레드 시트의 크기에 관계없이 셀 기반 피드를 사용하면 스프레드 시트 url에 매개 변수를 전달할 수 있고 특정 양의 행과 열만 가져올 수 있으므로 몇 개의 행만 가져와야했습니다.

목록 및 셀 기반 피드에서 enter link description here 문서를 참조 할 수 있습니다.

0

항상 도움이 될 코드 예제를 게시

다음 코드의 조각 모두가 probl을 이해해야한다. 더 낫네.

시트 API에 실제로 어떤 요청을했는지 확신 할 수 없지만 문서를 읽을 때 필요한 셀 범위를 지정하려고 했습니까? 방법을 잘 모르는 경우 this page을 참조 할 수 있습니다.

-이 방법을 사용하면 문서의 덩어리를 읽을 때마다 처리하고 처리 할 때 다음 행을 가져올 수 있습니다 (문서에 너무 많은 행이있는 경우).

+0

감사합니다. 참조 링크가 도움이되었습니다. 나는 소스 코드를 추가하여 질문을 편집했다. 같은 것을 조언 해주세요. –