Tengo requisitos para leer archivos XLS (no xlsx) usando PhpSpreadsheet y tengo problemas. Intenté esto (como dice la documentación pero ...)

require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("lista.xls");
$worksheet = $spreadsheet->getActiveSheet();

echo '<table>' . PHP_EOL;
foreach ($worksheet->getRowIterator() as $row) {
    echo '<tr>' . PHP_EOL;
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(FALSE); // This loops through all cells,
                                                       //    even if a cell value is not set.
                                                       // By default, only cells that have a value
                                                       //    set will be iterated.
    foreach ($cellIterator as $cell) {
        echo '<td>' .
             $cell->getValue() .
             '</td>' . PHP_EOL;
    }
    echo '</tr>' . PHP_EOL;
}
echo '</table>' . PHP_EOL;

echo "<br>fin";

Pero no funcionó (¡funcionó con un archivo xlsx, pero no con un archivo xls!)

Luego intenté abrir el archivo de manera diferente:

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$sheet = $reader->load("lista.xls");

Pero tampoco funciona ...

Realmente necesito resolver esto ... ¡por favor ayuda! PD: he probado BasicExcel y PHPExcel pero tampoco parece funcionar

5
Ari Waisberg 13 sep. 2018 a las 19:52

3 respuestas

La mejor respuesta

Verificaría con su cliente para ver si están utilizando Excel real o alguna otra hoja de cálculo.

Si están utilizando alguna otra hoja de cálculo y exportan utilizando una funcionalidad "Exportar como Excel" que puede explicar por qué PHPSpreadsheet no los reconoce como ninguno de los posibles formatos de Excel válidos.

En ese caso, y dependiendo de lo que haya en la hoja de cálculo, puede valer la pena pedirles que exporten su hoja de cálculo como un archivo csv (valores delimitados por comas), ya que es un formato tan simple que debería ser una salida válida. Luego, puede leerlo utilizando las llamadas de función fgetcsv() en lugar de tener que usar la hoja de cálculo PHPS.

7
RiggsFolly 13 sep. 2018 a las 19:14

Intenta eliminar esta declaración

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("lista.xls");

Y cambiarlo con esto

$inputFileName = "lista.xls";
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($inputFileName);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($inputFileName);
0
Budi Prasetyo 14 jun. 2019 a las 07:24
<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

$inputFileType = 'Xlsx';
$inputFileName = './mysheet.xlsx';

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Advise the Reader that we only want to load cell data  **/
$reader->setReadDataOnly(true);

$worksheetData = $reader->listWorksheetInfo($inputFileName);

foreach ($worksheetData as $worksheet) {

$sheetName = $worksheet['worksheetName'];

echo "<h4>$sheetName</h4>";
/**  Load $inputFileName to a Spreadsheet Object  **/
$reader->setLoadSheetsOnly($sheetName);
$spreadsheet = $reader->load($inputFileName);

$worksheet = $spreadsheet->getActiveSheet();
print_r($worksheet->toArray());

}
8
Mykola Veriga 16 sep. 2019 a las 00:32