使用PhpSpreadsheet在PHP中阅读XLS

Ari*_*erg 4 php excel xls 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";
Run Code Online (Sandbox Code Playgroud)

但是没有用(它只能用于xlsx文件,而不能用于xls文件!)

然后我尝试以不同的方式打开文件:

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

但也行不通...

我真的需要解决这个问题...请帮忙!PS:我已经尝试过BasicExcel和PHPExcel,但似乎也没有用

Rig*_*lly 7

我会与您的客户核对一下,看看他们是否正在使用真正的Excel或其他电子表格。

如果他们使用其他电子表格并使用“导出为Excel”功能进行导出,则可以解释为什么PHPSpreadsheet无法将其识别为任何可能的有效excel格式。

在这种情况下,并取决于电子表格中的内容,可能值得要求他们将电子表格导出为csv(逗号分隔值)文件,因为这种格式很简单,应该是有效的输出。然后,您可以使用fgetcsv()函数调用来读取它,而不必使用PHPSpreadsheet。

  • 确切地!它们是从系统导出的,而不是从 excel 本身导出的!谢谢! (2认同)
  • @Arya xlsx 是一个完全不同的世界,xls... xlsx 它是纯 xml,您不需要 excel 库,您可以在任何代码编辑器中打开它并理解它... xls 是专有的,因此您需要它们。 .. 在这种情况下,lib 似乎以一种 excel 本身可以识别它的方式创建文件,但其他 libs 不会...... (2认同)

Myk*_*iga 6

<?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());

}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,有帮助。 (2认同)