0

gdocs에서 비교적 큰 스프레드 시트로 작업하고 zend 라이브러리를 통해 액세스합니다. 주어진 시간에 특정 열만 필요하므로 메모리를 절약하기 위해 목록 기반 피드를 사용하여 전체 열 스프레드 시트가 아닌 특정 열만 검색하면 도움이됩니다. 내가 사용하고 기본 쿼리는 젠드gdocs에서 zend gdata로 스프레드 시트의 특정 열만 검색하십시오.

$query = new Zend_Gdata_Spreadsheets_ListQuery(); 
$query->setSpreadsheetKey($spreadsheetKey); 
$query->setWorksheetId($worksheetId); 
$listFeed = $spreadsheetService->getListFeed($query); 

반환 내가 행의 수를 제한하는 난이 단지 작품을 볼 수까지 $query->setSpreadsheetQuery('name=someName');을 통해 구조화 된 쿼리를 보낼 수 있지만 할 수있는 기회를 한 문서와하지에 따라입니다 열의 수. 어떻게 든 특정 열을 가져 오기 위해이 방법을 사용할 수 있습니까? 또는 스프레드 시트의 미리 지정된 행만 가져 와서 스프레드 시트의 블록 만 검색하고 그 때 한 블록을 깎아 내리는 것이 도움이됩니다. 어느 쪽이든, 나는 주어진 시간에 전체 스프레드 쉬트를 메모리에 두는 것을 피할 필요가있다.

도움 주셔서 감사합니다.

답변

0

셀 기반 피드를 사용하여이 문제를 해결할 수있었습니다. 기본적으로 내가 한 일은 처음 나에게 $column 열의 열 번호를 줄 것이다 그래서

$query = new Zend_Gdata_Spreadsheets_CellQuery(); 
$query->setSpreadsheetKey($spreadsheetkey); 
$query->setWorksheetId($wworksheetkey); 
$query->setMinRow(1); 
$query->setMaxRow(1); 
$headerFeed = $spreadsheetService->getCellFeed($query); 

foreach($headerFeed as $cellEntry){ 
    if(strcasecmp($cellEntry->cell->getText(), $column) == 0){ 
     $colNr = $cellEntry->cell->getColumn(); 
     break; 
    } 
} 

같은 특정 열 머리글의 열 번호를 얻을 수 있었다. 그런 다음 주어진 열 번호에 대해 특정 범위의 행을 가져 와서 메모리에서 전체 스프레드 시트 (또는 열)를 사용하지 않고 전체 열 블록을 블록 단위로 읽을 수 있습니다. 이 $startingRow$endingRow 나는이 칼럼을 통해 반복 할 수를 변경하여

$query->setMinCol($colNr); 
$query->setMaxCol($colNr); 
$query->setMinRow($startingRow); 
$query->setMaxRow($endingRow); 

$columnFeed = $spreadsheetService->getCellFeed($query); 
foreach($columnFeed as $cellEntry){ 
    $result[$cellEntry->cell->getRow()] = $cellEntry->cell->getText(); 
} 

으로 수행 할 수 있습니다. 하나는 이들의 선택에주의를 기울여야합니다. 왜냐하면 'out of bounds'라면 google api는 http 400 코드를 반환 할 것이기 때문입니다. 셀은 값을 가질 필요는 없지만 존재해야합니다 (스프레드 시트를 아래로 스크롤하면 마지막 행 번호가 두 값의 최대 값이어야 함). 100면 (빈) 행 스프레드 시트 기본값으로 생각합니다.

이것은 아마도 가장 우아하고 빠른 해결책은 아니지만 나에게 적합합니다.