2014-04-15 8 views
13

Próbuję odczytać tylko jeden arkusz z dokumentu xls i mam to:Czytaj tylko konkretny arkusz

$objPHPExcel = $objReader->load('daily/' . $fisierInbound); 
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0); 
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 

      $worksheetTitle  = $worksheet->getTitle(); 
      $highestRow   = $worksheet->getHighestRow(); // e.g. 10 
      $highestColumn  = $worksheet->getHighestColumn(); // e.g 'F' 
      $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
      $dataCalls = $worksheet->getCellByColumnAndRow(2, 2)->getValue(); 
      $dataSubstr = substr($dataCalls, 53); 


     } 

Problemem jest to, że czyta wszystkie arkusze w pliku.

Wszelkie pomysły?

+2

Masz iteraration 'dla each' arkuszu. To oczywiste, że zamierza je wszystkie przeczytać! Musisz wywołać metodę 'getActiveSheet()' z klasy PHPExcel. –

+0

Udało mi się dowiedzieć. Dzięki ! – ardb

+0

'getHighestRow()' powinno zostać zamienione na 'getHighestDataRow()'; to samo dla funkcji kolumnowej ... – Raptor

Odpowiedz

19

Jak opisano w dokumencie PHPExcel User Documentation - Reading Spreadsheet Files w folderze /Documentation (sekcja 5.2 zatytułowany „Tylko do odczytu nazwane arkusze z pliku”.):

Jeśli znasz nazwę arkusza, który chcesz przeczytać.

$inputFileType = 'Excel5'; 
$inputFileName = './sampleData/example1.xls'; 
$sheetname = 'Data Sheet #2'; 

/** Create a new Reader of the type defined in $inputFileType **/ 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
/** Advise the Reader of which WorkSheets we want to load **/ 
$objReader->setLoadSheetsOnly($sheetname); 
/** Load $inputFileName to a PHPExcel Object **/ 
$objPHPExcel = $objReader->load($inputFileName); 

Jeśli nie znasz nazwy arkusza z góry, można uzyskać listę wszystkich arkuszy przed załadowaniem pliku

$inputFileType = 'Excel5'; 
$inputFileName = './sampleData/example1.xls'; 

/** Create a new Reader of the type defined in $inputFileType **/ 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
/** Read the list of worksheet names and select the one that we want to load **/ 
$worksheetList = $objReader->listWorksheetNames($inputFileName) 
$sheetname = $worksheetList[0]; 

/** Advise the Reader of which WorkSheets we want to load **/ 
$objReader->setLoadSheetsOnly($sheetname); 
/** Load $inputFileName to a PHPExcel Object **/ 
$objPHPExcel = $objReader->load($inputFileName); 
+0

dziękuję @ Mark. – black

9

Można zrobić to łatwiejsze niż uzyskanie listy arkuszu nazwy:

$objPHPExcel->setActiveSheetIndex(2); 
$worksheet = $objPHPExcel->getActiveSheet(); 

Ładuje arkusz roboczy nr 2 (trzeci).

+0

Ale co, jeśli użytkownik zmieni indeksy arkuszy? –

4

najprostszym sposobem dla tych, którzy wciąż walczą z tym -

//include library 
include('path/to/PHPExcel/IOFactory.php'); 

//load the file 
$objPHPExcel = PHPExcel_IOFactory::load('your/path/for/excel/file'); 

//get the worksheet of your choice by its name 
$worksheet = $objPHPExcel->getSheetByName('Name of sheet'); 

#and your work goes here...