]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Добавлен парсинг скачиваемого xlsx документа и вывод его на экран
authorAlexander Smirnov <fredeom@mail.ru>
Fri, 19 Jul 2024 11:30:45 +0000 (14:30 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Fri, 19 Jul 2024 11:30:45 +0000 (14:30 +0300)
erp24/actions/motivation/UploadXlsxAction.php
erp24/views/motivation/upload-xlsx.php

index ddd8f87336f2e02c8d2ae8c35522e27a9db9b89e..1ac5a11e9e3b7fdd02ba8d1a4c190df57ac6031b 100644 (file)
@@ -6,31 +6,50 @@ use Yii;
 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
index 269cf1a087a2c4f4b3eed3841dd635b6190b8e4c..f78b8a546d1e31aef39bf9e4fc93daf9fd7847ad 100644 (file)
@@ -5,6 +5,7 @@ use yii\base\DynamicModel;
 use yii\widgets\ActiveForm;
 
 /** @var $model DynamicModel */
+/** @var $sheets array */
 
 ?>
 
@@ -26,4 +27,31 @@ use yii\widgets\ActiveForm;
 
     <?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>