2011-09-05 1 views
1

PHPExcel 스크립트를 사용하여 예제 파일을 사용하여 Excel 파일에서 데이터를 추출해 보았습니다. 데이터 추출이 성공적 이었지만 제한적이지는 않았습니다.데이터를 읽을 수 없거나 PHPexcel 스크립트를 사용하여 지정된 열과 행으로 구성 가능한 읽기 필터

문제에 대한 세부 정보 :이 파일 (아래에서 언급 함)은 원거리 열 (즉, 'A', 'Z')에 특정 행 수의 Excel 파일을 읽도록 바인딩되어 있습니다. 행은 수로 집계되었지만 열은 수집되지 않았습니다. column의 지정된 범위에 대해서만 열 O를 사용합니다. 심지어 더 많은 열 범위를 제공하기 위해 테스트를 마쳤으며 "A"열에서 "O"및 "O"이하의 열까지 표시합니다.

문제를 분류하고 알려주시겠습니까? 잘못된.

귀중한 제안과 의견을 기다리고 있습니다.

모든 코드 toArray() 메소드를 표시

<?php 

error_reporting(E_ALL); 
set_time_limit(0); 

date_default_timezone_set('Europe/London'); 

?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

<title>PHPExcel Reader Example #10</title> 

</head> 
<body> 

<h1>PHPExcel Reader Example #10</h1> 
<h2>Simple File Reader Using a Configurable Read Filter</h2> 
<?php 

set_include_path(get_include_path() . PATH_SEPARATOR . '/import/Classes/'); 

/** PHPExcel_IOFactory */ 
include 'PHPExcel/IOFactory.php'; 

$inputFileType = 'Excel2007'; 
$inputFileName = './book2.xlsx'; 
$sheetname = 'Sheet2'; 

class MyReadFilter implements PHPExcel_Reader_IReadFilter 
{ 
    private $_startRow = 0; 

    private $_endRow = 0; 

    private $_columns = array(); 

    public function __construct($startRow, $endRow, $columns) { 
     $this->_startRow = $startRow; 
     $this->_endRow  = $endRow; 
     $this->_columns  = $columns; 
    } 

    public function readCell($column, $row, $worksheetName = '') { 
     if ($row >= $this->_startRow && $row <= $this->_endRow) { 
      if (in_array($column,$this->_columns)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

$filterSubset = new MyReadFilter(9,15,range('G','K')); 

echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of 

',$inputFileType,'<br />'; 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
echo 'Loading Sheet "',$sheetname,'" only<br />'; 
$objReader->setLoadSheetsOnly($sheetname); 
echo 'Loading Sheet using configurable filter<br />'; 
$objReader->setReadFilter($filterSubset); 
$objPHPExcel = $objReader->load($inputFileName); 

echo '<hr />'; 

$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); 
var_dump($sheetData); 
?> 
<body> 
</html> 

답변

2

아래에 나타낸 바와 같이 빠른 응답 미리

감사 대기

,

흰꽃 산호세 A1에서 가장로드 된 행과 열까지의 워크 시트. 따라서 행 1-8을로드하지 않아도 반환 된 셀에 여전히 빈 셀로 나타납니다. 정렬; 마찬가지로 열 A ~ F도 배열의 빈 셀로 나타납니다.

스타일은 읽기 필터 범위에 속하는 셀 시트가 아니라 워크 시트의 모든 셀에 대해 여전히로드됩니다. 이는 셀이로드되기 전에 모든 스타일이로드되고 읽기 필터는 셀만 검사하기 때문입니다.

필터를 통해로드 한 셀만 포함 된 배열을 다시 검색하려면 rangeToArray() 메서드를 사용해야합니다.

$sheetData = $objPHPExcel->getActiveSheet()->rangeToArray('G9:K15',null,true,true,true); 
+0

감사합니다. 이것에 주목할 것입니다. 나는 필요한 변경을 할 것이다. 지연된 응답을 드려서 죄송합니다. –

관련 문제