use yii\base\Action;
use yii\base\DynamicModel;
use yii\web\UploadedFile;
+use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
class UploadXlsxAction extends Action
{
public function run() {
$model = DynamicModel::validateData([
- 'myfile' => null
+ 'myfile'
], [
['myfile', 'file', 'skipOnEmpty' => false, 'extensions' => 'xlsx'],
]);
- if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {
- var_dump($_FILES);
- if ($model->validate()) {
- $xlsx = UploadedFile::getInstanceByName('myfile');
- var_dump($xlsx);
- $path = 'uploads/' . date("YdmHis") . rand(1000, 9999);
- $xlsx->saveAs($path);
- var_dump(321);
- } else {
- var_dump($model->getErrors());
- var_dump(Yii::$app->request->post());
+ $sheets = [];
+ if (Yii::$app->request->isPost) {
+ $model->myfile = UploadedFile::getInstance($model, 'myfile');
+ if ($model->myfile && $model->validate()) {
+ $path = Yii::getAlias('@uploads') . '/' . date("YmdHis") . rand(1000, 9999) . "." . $model->myfile->extension;
+ $model->myfile->saveAs($path);
+ // read xlsx
+ $reader = ReaderEntityFactory::createXLSXReader();
+ $reader->open($path);
+ foreach ($reader->getSheetIterator() as $sheetData) {
+ $dataNum = 1;
+ $sheet = ['rows' => [], 'vars' => []];
+ foreach ($sheetData->getRowIterator() as $row) {
+ $sheetRow = [];
+ foreach ($row->getCells() as $cell) {
+ if ($cell->getValue() == '###') {
+ $dataNum = 2;
+ break;
+ }
+ $sheetRow []= $cell->getValue();
+ }
+ switch ($dataNum) {
+ case 1: { $sheet['rows'][] = $sheetRow; break;}
+ case 2: { $sheet['vars'][] = $sheetRow; break;}
+ }
+ }
+ $sheets []= $sheet;
+ }
+ $reader->close();
}
}
return $this->controller->render('upload-xlsx',
- compact('model'));
+ compact('model', 'sheets'));
}
}
\ No newline at end of file
use yii\widgets\ActiveForm;
/** @var $model DynamicModel */
+/** @var $sheets array */
?>
<?php ActiveForm::end() ?>
+ <?php foreach ($sheets as $sheet): ?>
+ <table border=1>
+ <thead>
+ <tr>
+ <th>Num</th>
+ <th>Nam</th>
+ <th>Val</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php $dataNum = 1 ?>
+ <?php foreach ($sheet as $key => $rows): ?>
+ <?php foreach ($rows as $row): ?>
+ <tr>
+ <?php if ($key == 'vars' && $dataNum == 1) { $dataNum = 2; echo '<td>###</td>'; continue; } ?>
+ <td><?= $row[0] ?></td>
+ <td><?= $row[1] ?></td>
+ <?php if ($key == 'rows'): ?>
+ <td><?= $row[2] ?></td>
+ <?php endif ?>
+ </tr>
+ <?php endforeach; ?>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <?php endforeach; ?>
+
</div>