安装
composer require phpoffice/phpspreadsheet
代码
<?php
require './vendor/autoload.php';
$filename = 'aa.xlsx';
# 根据文件名自动创建 适用于不知道文件后缀时xls还是xlsx的情况
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filename);
# 或者如果确定文件后缀,直接创建,性能会略优于上面方法
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
# $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xls");
$spreadsheet = $reader->load($filename);
# 甚至可以直接指定reader实现创建 性能又会优于上面一丢丢
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
# 可以额外设定只读模式,上面也试用,让工具只读取数据,不处理样式,性能会更好
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($filename);
// $sheet = $spreadsheet->getActiveSheet();
# 或者直接指定序号获得第一个sheet
$sheet = $spreadsheet->getSheet(2);
# 读取excel中A1数据,即第一行第一列,返回“姓名”
// $sheet->getCell('A1')->getValue();
# B1 返回“性别”
//$sheet->getCell('B1')->getValue();
# 获取当前总行数
$rows = $sheet->getHighestRow();
$users = [];
# 一般excel中第一行为标题,所以实际数据从第二行开始 循环读取
for($i = 1; $i <= $rows; $i++) {
$temp = [];
$temp['name'] = $sheet->getCell('A' . $i)->getValue();
$temp['sex'] = $sheet->getCell('B' . $i)->getValue();
$temp['age'] = $sheet->getCell('C' . $i)->getValue();
# 防止空行情况
if (!$temp['name']) {
continue;
}
$users[] = $temp;
}
var_dump($users);