在 Yii2 中导入 Excel

Import Excel in Yii2

我有使用高级模板和数据库的 yii2 应用程序 mySql,我已经制作了将 excel 文件导入到 table 之一的函数, 我在一个名为 student 的控制器中创建了这个函数,其中包含学生的 CRUD data.this 是我的代码

 public function actionImportExcel()
{
    $inputFile = 'uploads/siswa_file.xlsx';
    try{
        $inputFileType = \PHPExcel_IOFactory::identify($inputFile);
        $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
        $objPHPExcel = $objReader->load($inputFile);
    } catch (Exception $e) {
        die('Error');
    }

    $sheet = $objPHPExcel->getSheet(0);
    $highestRow = $sheet->getHighestRow();
    $highestColumn = $sheet->getHighestColumn();

    for($row=1; $row <= $highestRow; $row++)
    {
        $rowData = $sheet->rangeToArray('A'.$row.':'.$highestColumn.$row,NULL,TRUE,FALSE);

        if($row==1)
        {
            continue;
        }

        $siswa = new Siswa();
        $siswa->nis = $rowData[0][0]; 
        $siswa->nama_siswa  = $rowData[0][1]; 
        $siswa->jenis_kelamin  = $rowData[0][2]; 
        $siswa->ttl  = $rowData[0][3]; 
        $siswa->alamat  = $rowData[0][4]; 
        $siswa->telp  = $rowData[0][5]; 
        $siswa->agama  = $rowData[0][6]; 
        $siswa->nama_ortu  = $rowData[0][7]; 
        $siswa->telp_ortu  = $rowData[0][8]; 
        $siswa->pekerjaan_ortu = $rowData[0][9];
        $siswa->tahun_masuk = $rowData[0][10];
        $siswa->kelas = $rowData[0][11];
        $siswa->save();

        print_r($siswa->getErrors());
    }
    die('okay');
}

但我不知道如何在视图中创建一个按钮来使该功能起作用。我的意思是我想制作一个按钮,当用户单击该按钮并浏览他们的 excel 文件时,他们可以导入该文件并且 excel 中的数据可以导入到数据库

首先你应该上传文件

然后用你的函数处理

您必须生成几部分代码..

例如用户上传文件的视图

View: @app/views/site/upload.php

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

    <?= $form->errorSummary($model); ?>

    <?= $form->field($model, 'imageFile')->fileInput() ?>

    <button>Submit</button>

<?php ActiveForm::end() ?>

Controller: @app/controllers/SiteController.php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()) {
                // file is uploaded successfully
                return;
            }
        }

        return $this->render('upload', ['model' => $model]);
    }
}

Model: @app/models/UploadForm.php

namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;

    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }

    public function upload()
    {
        if ($this->validate()) {
            $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }
}

代码来自this doc