@kurt
Для импорта XLS в Yii2 необходимо выполнить следующие действия:
- Установить библиотеку phpoffice/phpexcel: composer require phpoffice/phpexcel.
- Создать модель, отвечающую за импорт данных. Например:
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]);
}
}
|
- Создать форму для отправки файла XLS. Например:
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, отправить его на сервер и выполнить импорт данных. В методе модели можно выполнять любую обработку данных, в зависимости от требований проекта.