web-dev-qa-db-ja.com

PhpSpreadsheetを使用してXLSをPHPで読み取ります

PhpSpreadsheetを使用して(xlsxではなく)XLSファイルを読み取る必要があり、問題があります。私はこれを試しました(ドキュメントが言うように...)

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を試しましたが、動作しないようです。

5
Ari Waisberg

クライアントに実際のExcelまたは他のスプレッドシートを使用しているかどうかを確認します。

他のスプレッドシートを使用しており、「Excelとしてエクスポート」機能を使用してエクスポートしている場合、PHPSpreadsheetが有効なExcel形式として認識されない理由を説明している可能性があります。

その場合、スプレッドシートの内容によっては、スプレッドシートをcsv(カンマ区切り値)ファイルとしてエクスポートするように依頼することをお勧めします。 。次に、PHPSpreadsheetを使用する代わりに、fgetcsv()関数呼び出しを使用してそれを読み取ることができます。

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

}
7
Mykola Veriga

このステートメントを削除してみてください

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

これで変更

$inputFileName = "lista.xls";
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($inputFileName);
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load($inputFileName);
0
Budi Prasetyo