Как мне прочитать второй лист файла xlsx с помощью PHPExcel?
Я знаю, как читать мою электронную таблицу xlsx и просматривать первый лист.
В нем 5 листов, и я не могу добраться до любого другого, кроме первого.
Вот код, который я использую, который был прямо из документации. Вы можете видеть, что я пытался использовать setActiveSheet, но это бросило ошибку Call to undefined method PHPExcel::setActiveSheet()
,
Код:
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("cmt_school_data.xlsx");
//$objPHPExcel->setActiveSheet(1);
$objWorksheet = $objPHPExcel->getActiveSheet();
echo '<table border=1>' . "\n";
foreach ($objWorksheet->getRowIterator() as $row) {
echo '<tr>' . "\n";
$cellIterator = $row->getCellIterator();
// This loops all cells, even if it is not set.
// By default, only cells that are set will be iterated.
$cellIterator->setIterateOnlyExistingCells(false);
foreach ($cellIterator as $cell) {
echo '<td>' . $cell->getValue() . '</td>' . "\n";
}
echo '</tr>' . "\n";
}
echo '</table>' . "\n";
4 ответа
Хорошо... имена обманывают. setActiveSheetIndex также получает, поэтому решение было
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("cmt_school_data.xlsx");
$objWorksheet = $objPHPExcel->setActiveSheetIndex(1);
//objWorksheet = $objPHPExcel->getActiveSheet();
echo '<table border=1>' . "\n";
foreach ($objWorksheet->getRowIterator() as $row) {
echo '<tr>' . "\n";
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // This loops all cells,
// even if it is not set.
// By default, only cells
// that are set will be
// iterated.
foreach ($cellIterator as $cell) {
echo '<td>' . $cell->getValue() . '</td>' . "\n";
}
echo '</tr>' . "\n";
}
echo '</table>' . "\n";
<?php
/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
/** PHPExcel_IOFactory */
include 'PHPExcel/IOFactory.php';
$inputFileType = 'Excel5';
// $inputFileType = 'Excel2007';
// $inputFileType = 'Excel2003XML';
// $inputFileType = 'OOCalc';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
echo 'Loading all WorkSheets<br />';
$objReader->setLoadAllSheets();
$objPHPExcel = $objReader->load($inputFileName);
echo '<hr />';
echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
$loadedSheetNames = $objPHPExcel->getSheetNames();
foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
echo **$sheetIndex**,' -> ',$loadedSheetName,'<br />';
$sheetData = $objPHPExcel->**getSheet**(**$sheetIndex**)->toArray(null,true,true,true);
var_dump($sheetData);
}?>
Я знаю, что было слишком поздно для ответа. Но я нахожу решение, как показано ниже.
//load library - EXCEL
$this->load->library('excel');
$objPHPExcel = PHPExcel_IOFactory::load('./folder/exceldata.xls');
//Get How Many Sheets in your Excel file.
echo $objPHPExcel->getSheetCount();
Затем, чтобы получить доступ к листу по его индексу, используйте метод getSheet(). Обратите внимание, что листы индексируются с 0. например
//Retrieve the **1st 'tab' worksheet** e.g. called 'Sheet 1'
$worksheet = $objPHPExcel->getSheet(0);
Так что в вашем случае, если вы хотите читать только лист 2, то
$worksheet = $objPHPExcel->getSheet(1);
ИЛИ, чтобы прочитать все листы из файла Excel, вы должны использовать цикл foreach, как показано ниже.
foreach($objPHPExcel->getWorksheetIterator() as $worksheet)
{
$highestRow = $worksheet->getHighestRow();
$highestColumn = $worksheet->getHighestColumn();
//echo $highestRow;
//echo $highestColumn;
//die();
for($row=2; $row<=$highestRow; $row++)
{
$column1 = $worksheet->getCellByColumnAndRow(0, $row)->getValue();
$column2= $worksheet->getCellByColumnAndRow(1, $row)->getValue();
$finaldata[] = array(
'data1' => trim($column1),
'data2' => trim($column2),
);
}
}
/*echo "<pre>";
echo count($finaldata);
print_r($finaldata);
die();*/
Как прочитать несколько листов из одного файла Excel с помощью PHPExcel. [используя Codeigniter 3.1.11]
несколько листов из одного файла excel1 : https://stackru.com/images/4fb6e4727d553aa527028a2009494db6797a50c7.png
Исходный код // Функция массовой загрузки bulk_upload(){$output = array();
$file_upload = $_FILES['bulk_karvy_file']['tmp_name'];
if (isset($file_upload) && !empty($file_upload)){
//You can add directly the Composer Autoloder in your controller:
require FCPATH . 'vendor/autoload.php';
try{
$db_spreadsheet = PHPExcel_IOFactory::load($file_upload);
}
catch (Exception $e){
die('Error loading file "' . pathinfo($file_upload, PATHINFO_BASENAME) . '": '.@$e->getMessage());
}
// sheet list
$sheetListArray = ["Ann B","Ann C","Ann E","Ann F"];
$sheetData = [];
$sheetCount = $db_spreadsheet->getSheetCount();
if(is_null($sheetCount))
{}
else{
// Read Excel Sheet
for ($i = 0; $i < $sheetCount; $i++)
{
$sheet = $db_spreadsheet->getSheet($i);
$sheetN = $sheet->getTitle();
if(in_array($sheetN,$sheetListArray))
{
$sheetData[] = array(
'data' => $sheet->toArray(null, true, true, true),
'file' => $sheetN,
'total' => count($sheet->toArray(null, true, true, true))
);
}
}
// Read all Sheets from your Excel file, you have to use foreach loop
foreach($sheetData as $val)
{
$N = @$val['total'];
for($i=2; $row <= $N; $i++)
{
$db_ch= 64;
$sl_no = trim($val['data'][$i][chr(++$db_ch)]);
if(empty($sl_no)){break;}
$ref_no = trim($val['data'][$i][chr(++$db_ch)]);
$remark = trim($val['data'][$i][chr(++$db_ch)]);
$dep_slip_no = trim($val['data'][$i][chr(++$db_ch)]);
$inst_no = str_pad(trim($val['data'][$i][chr(++$db_ch)]),6, '0', STR_PAD_LEFT);
$amount = trim($val['data'][$i][chr(++$db_ch)]);
$drawee_name = trim($val['data'][$i][chr(++$db_ch)]);
$sch_code = str_pad(trim($val['data'][$i][chr(++$db_ch)]),3, '0', STR_PAD_LEFT);
$ufc_code = trim($val['data'][$i][chr(++$db_ch)]);
$acc_no = trim($val['data'][$i][chr(++$db_ch)]);
$ihno = trim($val['data'][$i][chr(++$db_ch)]);
$trno = trim($val['data'][$i][chr(++$db_ch)]);
$tr_dt = str_replace('/', '-',trim($val['data'][$i][chr(++$db_ch)]));
$value_date = str_replace('/', '-',trim($val['data'][$i][chr(++$db_ch)]));
$branch = trim($val['data'][$i][chr(++$db_ch)]);
$file_name = trim($val['data'][$i][chr(++$db_ch)]);
$category = trim($val['data'][$i][chr(++$db_ch)]);
$upload_type = trim($val['data'][$i][chr(++$db_ch)]);
$fl_name = @$val['file'];
$fl_name_id = @$db_fn->id;
$created_at = date("Y-m-d H:i:s");
$updated_at = date("Y-m-d H:i:s"); [chr(++$db_ch)]);
}
}
} // end of else
}
echo json_encode($sheetData);
}