Только для чтения
Я пытаюсь прочитать только один лист из документа xls, и у меня есть это:
$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);
}
Проблема в том, что он читает все листы файла.
Любые идеи?
Ответы
Ответ 1
Как описано в документе PHPExcel User Documentation - Reading Spreadsheet Files
в папке /Documentation
(раздел 5.2, озаглавленный "Чтение только именованных рабочих листов из файла" ):
Если вам известно имя листа, который вы хотите прочитать.
$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);
Если вы не знаете имя рабочего листа заранее, вы можете получить список всех листов перед загрузкой файла
$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);
Ответ 2
Вы можете сделать это проще, чем получить список имен рабочих листов:
$objPHPExcel->setActiveSheetIndex(2);
$worksheet = $objPHPExcel->getActiveSheet();
Загружает # 2 (третий) рабочий лист.
Ответ 3
Самый простой способ для тех, кто все еще борется с этим -
//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...
Ответ 4
//load library - EXCEL
$this->load->library('excel');
$objPHPExcel = PHPExcel_IOFactory::load('./folder/exceldata.xls');
К отдельным рабочим листам можно получить доступ по имени или по их индексу в рабочей книге. Позиция индекса представляет порядок, в котором каждая "вкладка" рабочей таблицы отображается при открытии рабочей книги в MS Excel (или другой соответствующей программе электронных таблиц).
Чтобы получить доступ к листу по имени, используйте метод getSheetByName(), указав имя рабочего листа, к которому вы хотите получить доступ.
//Retrieve the worksheet called 'Worksheet 1'
$objPHPExcel->getSheetByName('Worksheet 1');
Чтобы получить доступ к листу по его индексу, используйте метод getSheet(). Обратите внимание, что листы индексируются с 0.
//Retrieve the **1st 'tab' worksheet** e.g. called 'Sheet 1'
$worksheet = $objPHPExcel->getSheet(0);
//Retrieve the **2nd 'tab' worksheet** e.g. called 'Sheet 2'
$worksheet = $objPHPExcel->getSheet(1);
Это все может быть достигнуто с помощью @Mark Baker PHPExcel Library. Благодарю.