elton182 / spreadsheet
用于Excel、OpenOffice和结构化文本文件的电子表格读取库,兼容cakephp3
Requires
- php: >= 5.3.0
- ext-zip: *
This package is auto-updated.
Last update: 2024-09-11 14:11:42 UTC
README
这是一个从 (https://github.com/nuovo/spreadsheet-reader) 分支出来的项目。我创建这个分支是为了使其与cakephp3和psr-4兼容。
spreadsheet-reader 是一个PHP电子表格读取库,与其他库不同之处在于它的主要目标是高效的数据提取,能够处理大型(真的很大)的文件。到目前为止,它可能不是CPU、时间或I/O高效的,但至少它不会耗尽内存(XLS文件可能除外)。
到目前为止,XLSX、ODS和文本/CSV文件解析应该是内存高效的。XLS文件解析使用的是来自 http://code.google.com/p/php-excel-reader/ 的 php-excel-reader,遗憾的是,它在处理更大的电子表格时存在内存问题,因为它一次读取所有数据并将其全部保存在内存中。
要求
- PHP 5.3.0或更高版本
- PHP必须支持Zip文件(见 https://php.ac.cn/manual/en/zip.installation.php)
在Cakephp控制器中的使用
<?php
namespace App\Controller;
use App\Controller\AppController;
use elton182\spreadsheet\SpreadsheetReader;
class ExcelController extends AppController
{
public function index(){
if($this->request->is('post')){
$arquivo = $this->request->data['uploadfile'][0]['tmp_name'];
$nome = $this->request->data['uploadfile'][0]['name'];
$Reader = new SpreadsheetReader($arquivo,$nome);
foreach ($Reader as $Row)
{
print_r($Row);
}
}
}
}
?>
使用
所有数据都是顺序地从文件中读取的,每行作为一个数字数组返回。这是读取文件的最简单方式
<?php
// If you need to parse XLS files, include php-excel-reader
require('php-excel-reader/excel_reader2.php');
require('SpreadsheetReader.php');
$Reader = new SpreadsheetReader('example.xlsx');
foreach ($Reader as $Row)
{
print_r($Row);
}
?>
然而,现在也支持读取具有多个工作表的文件格式。对于CSV,它被处理为只有一个工作表。
您可以通过调用返回一个以工作表索引为键、工作表名称为值的数组的 Sheets()
方法来检索文件中包含的工作表信息。然后,您可以通过将索引传递给 ChangeSheet($Index)
方法来更改当前正在读取的工作表。
示例
<?php
$Reader = new SpreadsheetReader('example.xlsx');
$Sheets = $Reader -> Sheets();
foreach ($Sheets as $Index => $Name)
{
echo 'Sheet #'.$Index.': '.$Name;
$Reader -> ChangeSheet($Index);
foreach ($Reader as $Row)
{
print_r($Row);
}
}
?>
如果更改到与当前打开的工作表相同的工作表,文件中的位置仍然会重置到开头,以便与更改到不同工作表时的行为保持一致。
测试
从命令行
php test.php path-to-spreadsheet.xls
在浏览器中
http://path-to-library/test.php?File=/path/to/spreadsheet.xls
许可
本库中的所有代码均根据包含在LICENSE文件中的MIT许可证授权,但目前为止,该库依赖于XLS文件解析的php-excel-reader库,该库的许可证为PHP许可证。