| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | 
							- <?php
 
- namespace app\common\util;
 
- use PhpOffice\PhpSpreadsheet\Exception;
 
- use PhpOffice\PhpSpreadsheet\IOFactory;
 
- use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
 
- /**
 
-  * Excel表格功能封装类
 
-  */
 
- class PhpSpreadsheetImport
 
- {
 
-     /**
 
-      * 读取表格数据
 
-      * @param string $path 路径
 
-      * @param int $sheetIndex 工作簿索引
 
-      * @param array $field 初始化数组键名
 
-      * @param int $row 从第几行开始读
 
-      * @param string $scene
 
-      * @return array
 
-      */
 
-     public static function readData(string $path, array $field = [], int $row = 2, int $sheetIndex = 0, string $scene = 'excel'): array
 
-     {
 
-         try {
 
-             // 创建读操作对象
 
-             $reader = IOFactory::createReader('Xlsx');
 
-             // 忽略任何格式的信息
 
-             $reader->setReadDataOnly(true);
 
-             // 打开文件、载入excel表格
 
-             $spreadsheet = $reader->load($path);
 
-             // 获取活动工作薄
 
-             $sheet = $spreadsheet->getSheet($sheetIndex);
 
-             // 返回表格数据
 
-             return self::getCellData($row, $sheet, $field);
 
-         } catch (\Exception $e) {
 
-             // 有异常发生
 
-             return ['code' => $e->getCode(), 'errMsg' => $e->getMessage()];
 
-         }
 
-     }
 
-     /**
 
-      * 获取单元格数据
 
-      * @param $row
 
-      * @param object $sheet
 
-      * @param array $field
 
-      * @return array
 
-      * @throws Exception
 
-      */
 
-     private static function getCellData($row, object $sheet, array $field):array
 
-     {
 
-         # 获取最高列 返回字母 如: C
 
-         $highestColumn = $sheet->getHighestColumn();
 
-         # 获取最大行 返回数字 如: 4
 
-         $highestRow = $sheet->getHighestRow();
 
-         # 列数 改为数字显示
 
-         $highestColumnIndex = Coordinate::columnIndexFromString($highestColumn);
 
-         $data = [];
 
-         // 从第二行开始读取数据
 
-         for ($row; $row <= $highestRow; $row++) {
 
-             $build = [];
 
-             // 从第一列读取数据
 
-             for ($col = 1; $col <= $highestColumnIndex; $col++) {
 
-                 // 'A' 对应的ASCII码十进制为 64
 
-                 // 将ASCII值转为字符
 
-                 $chr = chr(64 + $col);
 
-                 // 列转为数据库字段名
 
-                 $key = $field[$chr] ?? $chr;
 
-                 // 构建当前行数据
 
-                 $build[$key] = $sheet->getCellByColumnAndRow($col, $row)->getValue();
 
-             }
 
-             $data[] = $build; //当前行数据
 
-         }
 
-         return $data;
 
-     }
 
- }
 
 
  |