使用 PhpSpreadsheet 在 PHP 中读取 XLS
Read XLS in PHP using PhpSpreadsheet
我需要使用 PhpSpreadsheet 读取 XLS 文件(不是 xlsx),但我遇到了问题。我试过了(正如文档所说,但是......)
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";
但没有用(它对 xlsx 文件有效,但对 xls 文件无效!)
然后我尝试以不同的方式打开文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$sheet = $reader->load("lista.xls");
但还是不行...
我真的需要解决这个问题...请帮忙!
PS:我已经尝试过 BasicExcel 和 PHPExcel,但似乎也没有用
我会与您的客户确认他们使用的是真实的 Excel 还是其他电子表格。
如果他们使用其他一些电子表格并使用 "Export as Excel" 功能导出,这可以解释为什么 PHPSpreadsheet 无法将其识别为任何可能的有效 excel 格式。
在这种情况下,根据电子表格中的内容,可能值得要求他们将电子表格导出为 csv
(逗号分隔值)文件,因为这是一种非常简单的格式,它应该是一个有效的输出。然后,您可以使用 fgetcsv()
函数调用来阅读它,而不必使用 PHPSpreadsheet。
尝试删除此语句
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("lista.xls");
然后改成这个
$inputFileName = "lista.xls";
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($inputFileName);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($inputFileName);
<?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());
}
这里的问题是加载文件后将其转换为数组
$file = "file.xlsx";
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);
$spreadsheet = $spreadsheet->getActiveSheet();
$data_array = $spreadsheet->toArray();
我需要使用 PhpSpreadsheet 读取 XLS 文件(不是 xlsx),但我遇到了问题。我试过了(正如文档所说,但是......)
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";
但没有用(它对 xlsx 文件有效,但对 xls 文件无效!)
然后我尝试以不同的方式打开文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$sheet = $reader->load("lista.xls");
但还是不行...
我真的需要解决这个问题...请帮忙! PS:我已经尝试过 BasicExcel 和 PHPExcel,但似乎也没有用
我会与您的客户确认他们使用的是真实的 Excel 还是其他电子表格。
如果他们使用其他一些电子表格并使用 "Export as Excel" 功能导出,这可以解释为什么 PHPSpreadsheet 无法将其识别为任何可能的有效 excel 格式。
在这种情况下,根据电子表格中的内容,可能值得要求他们将电子表格导出为 csv
(逗号分隔值)文件,因为这是一种非常简单的格式,它应该是一个有效的输出。然后,您可以使用 fgetcsv()
函数调用来阅读它,而不必使用 PHPSpreadsheet。
尝试删除此语句
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("lista.xls");
然后改成这个
$inputFileName = "lista.xls";
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($inputFileName);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($inputFileName);
<?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());
}
这里的问题是加载文件后将其转换为数组
$file = "file.xlsx";
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);
$spreadsheet = $spreadsheet->getActiveSheet();
$data_array = $spreadsheet->toArray();