之前用过PHP读取excel、csv文件的一些库,比如PHPExcel,今天找了一个PHPOffice/PhpSpreadsheet,网上有说现在PHPExcel已经不再维护了,最新的一次提交还是在2017年12月25号,看了一下,phpexcel也还在维护中,不过更新频率不如PhpSpreadsheet。
PhpSpreadsheet需要php环境开启php_zip、php_xml、php_gd2、php_fileinfo扩展,我这里用PhpSpreadsheet主要是读取csv文件,PhpSpreadsheet本身可以支持很多格式,可以看IOFactory类中的定义。使用PhpSpreadsheet读取CSV表格内容的代码示例:
#composer.json中的配置,我这里php版本不是很高,就用这个了
"phpoffice/phpspreadsheet":"1.8.2"
#读取CSV表格内容代码
use \PhpOffice\PhpSpreadsheet\IOFactory;
//导入csv文件内容:注意Csv是有大小写要求的
$csvObject = IOFactory::createReader('Csv')
->setDelimiter(',')
->setInputEncoding('GBK')
->setEnclosure('"')
->setReadDataOnly(true)
->setSheetIndex(0);
try {
$spreadsheet = $csvObject->load($file);
} catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
echo ("文件载入失败:{$file}, Error:". $e->getMessage());
}
PhpSpreadsheet对于不同格式的文件有不同的读取方法,比如xlsx格式使用\PhpOffice\PhpSpreadsheet\Reader\Xlsx(),csv格式使用\PhpOffice\PhpSpreadsheet\Reader\Csv(),不过你直接使用这些类,它会提示不不建议直接使用,最好是使用\PhpOffice\PhpSpreadsheet\IOFactory 这个工厂类,通过IOFactory::ccreateReader方法来找到对应的类的处理器。
#读取表格内容数据
$sheet = $spreadsheet->getActiveSheet();
$res = array();
#getRowIterator表示从第几行开始取数据,一般第一行是列名
$data = array();
foreach $sheet->getRowIterator(2) as $row)
{
$row = array();
foreach ($row->getCellIterator() as $cell)
{
$row[] = $cell->getFormattedValue();
}
$data[$row->getRowIndex()] = $row;
}
在使用的过程中发现,一开始读取带有中文的csv表格,打印出来的内容不显示中文(有些可能乱码),需要添加这项设置setInputEncoding('GBK') ,其它PhpSpreadsheet还可支持Excel中多张表的操作.
#只导入某些表
$reader->setLoadSheetsOnly(['sheet1','sheet2']);
#列出所有sheet名称
$reader->listWorksheetNames('test.xls');
#列出sheet的信息,多少列、多少行等
$reader->listWorksheetInfo('test.xlsx');
标签:PhpSpreadsheet,php,读取,EXCEL,phpspreadsheet,PhpOffice,IOFactory,CSV,row
From: https://blog.csdn.net/weixin_47792780/article/details/137175812