J'ai une exigence pour lire les fichiers XLS (pas xlsx) en utilisant PhpSpreadsheet et j'ai des problèmes. J'ai essayé ça (comme le dit la documentation mais ...)
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";
mais n'a pas fonctionné (cela a fonctionné avec un fichier xlsx, mais pas avec un fichier xls!)
Ensuite, j'ai essayé d'ouvrir le fichier différemment:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$sheet = $reader->load("lista.xls");
mais ça ne marche pas non plus ...
J'ai vraiment besoin de résoudre ce problème ... aidez-moi! PS: j'ai essayé BasicExcel et PHPExcel mais ne semble pas non plus fonctionner
Je vérifierais auprès de votre client pour voir s'il utilise du vrai Excel ou une autre feuille de calcul.
S'ils utilisent une autre feuille de calcul et exportent à l'aide d'une fonctionnalité "Exporter en tant qu'Excel", cela peut expliquer pourquoi elle n'est pas reconnue par PHPSpreadsheet comme l'un des formats Excel valides possibles.
Dans ce cas, et selon ce qui se trouve dans la feuille de calcul, il peut être utile de leur demander d'exporter leur feuille de calcul en tant que fichier csv
(valeurs délimitées par des virgules), car c'est un format si simple qu'il devrait être une sortie valide . Vous pouvez ensuite le lire en utilisant les appels de fonction fgetcsv()
au lieu d'avoir à utiliser PHPSpreadsheet.
<?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());
}
essayez de supprimer cette déclaration
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("lista.xls");
et changez-le avec ce
$inputFileName = "lista.xls";
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($inputFileName);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($inputFileName);