上传excel文件,读取里面的数据,拼接成数组,而且不保存至服务器,降低存储压力
这里用的是thinkphp框架,phpoffice/phpspreadsheet包
thinkphp的安装就不说了,官方文档说的很详细
phpoffice/phpspreadsheet也只需要通过composer安装即可
composer require phpoffice/phpspreadsheet
前端代码
大致是这样的
<form action="上传地址" enctype="multipart/form-data" method="post">
<input type="file" name="image" /> <br>
<input type="submit" value="上传" />
</form>
后端代码
- 判断是否有excel_file文件
- 使用tp的验证器验证文件类型,体积等
- 使用iofactiory::load读取上传的文件,返回spreadsheet
- spreadsheet->getactivesheet 获取选中的sheet页,返回worksheet
- worksheet->getrowiterator 获取行集合
<?php
public function handleExcel(){
if(Request::file('excel_file')){
$file = Request::file('excel_file');
$validate = Validate::rule('excel_file|excel文件', 'require|fileExt:xlsx,xls|fileSize:2097152');
$validateRes = $validate->check(['excel_file'=>$file]);
if(!$validateRes){
$this->errorMsg = $validate->getError();
return false;
}
// 读取上传的文件内容
$spreadsheet = IOFactory::load($file);
$worksheet = $spreadsheet->getActiveSheet();
// 获取数据
foreach ($worksheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // 遍历所有单元格,包括空单元格
$linData = [];
$rowData = [];
foreach ($cellIterator as $cell) {
echo $cell->getColumn().":".$cell->getFormattedValue()."|";
}
echo PHP_EOL;
}
}
}
写的比较简陋,这里只是为了自己记录一下