@kurt
Для импорта XLS в Yii2 необходимо выполнить следующие действия:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
false], ]; } public function import() { $inputFileName = $this->file->tempName; $inputFileType = IOFactory::identify($inputFileName); $reader = IOFactory::createReader($inputFileType); $spreadsheet = $reader->load($inputFileName); // здесь можно выполнить обработку данных // например, прочитать данные из первого листа $worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); $highestColumn = $worksheet->getHighestColumn(); $data = []; for ($row = 1; $row <= $highestRow; ++$row) { $rowData = []; for ($col = 'A'; $col <= $highestColumn; ++$col) { $cellValue = $worksheet->getCell($col . $row)->getValue(); $rowData[] = $cellValue; } $data[] = $rowData; } return $data; } } |
1 2 3 4 5 6 7 8 9 |
load(Yii::$app->request->post()) && $model->validate()) { $data = $model->import(); // здесь можно сохранить данные в базу данных или вывести на экран var_dump($data); } return $this->render('xls-import', ['model' => $model]); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
title = 'XLS Import'; $this->params['breadcrumbs'][] = $this->title; ?> title) ?> ['enctype' => 'multipart/form-data']]); ?> field($model, 'file')->fileInput() ?> 'btn btn-primary']) ?> |
1 2 3 4 5 6 7 8 9 10 11 12 |
return [ // ... 'components' => [ // ... ], 'controllerMap' => [ 'site' => [ 'class' => 'appcontrollersSiteController', ], ], 'defaultRoute' => 'site/xls-import', ]; |
После выполнения этих шагов, пользователь сможет выбрать файл XLS, отправить его на сервер и выполнить импорт данных. В методе модели можно выполнять любую обработку данных, в зависимости от требований проекта.
@kurt
Дополнительно к предыдущему ответу, нужно учитывать, что библиотека PHPExcel больше не поддерживается и рекомендуется использовать библиотеку PhpSpreadsheet вместо нее. Для использования PhpSpreadsheet можно установить через Composer:
1
|
composer require phpoffice/phpspreadsheet |
Затем, в модели для импорта данных необходимо использовать пространство имен и классы PhpSpreadsheet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
use PhpOfficePhpSpreadsheetIOFactory; class ExcelImport { // Метод import для импорта данных из xls файла public function import($inputFileName) { $inputFileType = IOFactory::identify($inputFileName); $reader = IOFactory::createReader($inputFileType); $spreadsheet = $reader->load($inputFileName); $worksheet = $spreadsheet->getActiveSheet(); $highestRow = $worksheet->getHighestRow(); $highestColumn = $worksheet->getHighestColumn(); $data = []; for ($row = 1; $row <= $highestRow; ++$row) { $rowData = []; for ($col = 'A'; $col <= $highestColumn; ++$col) { $cellValue = $worksheet->getCell($col . $row)->getValue(); $rowData[] = $cellValue; } $data[] = $rowData; } return $data; } } |
Остальные шаги (создание экшна в контроллере, формы и маршрута) остаются теми же, как было описано в предыдущем ответе. Главное, перед использованием класса из библиотеки PhpSpreadsheet, убедитесь, что вы правильно настроили пространства имен и используете правильные классы для операций с файлами Excel.