Spout can now read ODS files. It's on par with the XLSX reader. The only difference is that the row iterator cannot be rewound. It supports the different output formats from LibreOffice and Excel, skipping extra rows/cells if needed.
63 lines
1.5 KiB
PHP
63 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Box\Spout\Reader\ODS;
|
|
|
|
use Box\Spout\Common\Exception\IOException;
|
|
use Box\Spout\Reader\AbstractReader;
|
|
|
|
/**
|
|
* Class Reader
|
|
* This class provides support to read data from a ODS file
|
|
*
|
|
* @package Box\Spout\Reader\ODS
|
|
*/
|
|
class Reader extends AbstractReader
|
|
{
|
|
/** @var \ZipArchive */
|
|
protected $zip;
|
|
|
|
/** @var SheetIterator To iterator over the ODS sheets */
|
|
protected $sheetIterator;
|
|
|
|
/**
|
|
* Opens the file at the given file path to make it ready to be read.
|
|
*
|
|
* @param string $filePath Path of the file to be read
|
|
* @return void
|
|
* @throws \Box\Spout\Common\Exception\IOException If the file at the given path or its content cannot be read
|
|
* @throws \Box\Spout\Reader\Exception\NoSheetsFoundException If there are no sheets in the file
|
|
*/
|
|
protected function openReader($filePath)
|
|
{
|
|
$this->zip = new \ZipArchive();
|
|
|
|
if ($this->zip->open($filePath) === true) {
|
|
$this->sheetIterator = new SheetIterator($filePath);
|
|
} else {
|
|
throw new IOException("Could not open $filePath for reading.");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns an iterator to iterate over sheets.
|
|
*
|
|
* @return SheetIterator To iterate over sheets
|
|
*/
|
|
public function getConcreteSheetIterator()
|
|
{
|
|
return $this->sheetIterator;
|
|
}
|
|
|
|
/**
|
|
* Closes the reader. To be used after reading the file.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function closeReader()
|
|
{
|
|
if ($this->zip) {
|
|
$this->zip->close();
|
|
}
|
|
}
|
|
}
|