yii2.0框架实现上传excel文件后导入到数据库的方法

yii2.0框架实现上传excel文件后导入到数据库的方法

1. 准备工作

首先,我们需要在yii2.0框架中实现上传excel文件的功能。要做到这一点,我们可以使用Yii2的内置的文件上传功能和Excel读取库。

1.1 配置文件上传

在Yii2中,我们需要在配置文件(一般为config/web.php)中配置文件上传的参数。在`components`数组中添加以下内容:

'upload' => [

'class' => 'yii\web\UploadedFile',

],

1.2 安装PHPExcel库

PHPExcel是一个PHP库,用于读取和写入Excel文件。我们可以使用Composer来安装它。在命令行中运行以下命令:

composer require phpoffice/phpexcel

2. 实现文件上传功能

现在,我们已经完成了准备工作,接下来我们可以开始实现上传功能。

2.1 创建上传表单

在视图文件中,我们可以创建一个表单,让用户可以选择并上传Excel文件。表单可以包含一个文件输入字段和一个提交按钮。>pre<>

use yii\bootstrap\ActiveForm;

use yii\helpers\Html;

$form = ActiveForm::begin([

'options' => ['enctype' => 'multipart/form-data']

]);

echo $form->field($model, 'file')->fileInput();

echo Html::submitButton('上传', ['class' => 'btn btn-primary']);

ActiveForm::end();

3. 实现导入功能

现在,我们已经实现了文件上传的功能,接下来我们需要将上传的Excel文件导入到数据库中。

3.1 处理上传文件

在控制器中,我们可以先处理上传的文件。我们可以使用`UploadedFile`类来处理文件上传。>pre<>

use yii\web\UploadedFile;

public function actionImport()

{

$model = new ImportForm();

if ($model->load(Yii::$app->request->post())) {

$model->file = UploadedFile::getInstance($model, 'file');

if ($model->file && $model->validate()) {

// 保存文件到服务器

$path = 'uploads/' . $model->file->baseName . '.' . $model->file->extension;

$model->file->saveAs($path);

// 导入Excel文件

$this->importExcel($path);

// 删除上传的文件

unlink($path);

// 显示成功信息

Yii::$app->session->setFlash('success', '导入成功!');

}

}

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

}

3.2 导入Excel文件

接下来,我们需要实现导入Excel文件的功能。我们可以使用PHPExcel库来读取Excel文件的内容。

use PHPExcel_IOFactory;

private function importExcel($path)

{

$objPHPExcel = PHPExcel_IOFactory::load($path);

$worksheet = $objPHPExcel->getActiveSheet();

$highestRow = $worksheet->getHighestRow();

$highestColumn = $worksheet->getHighestColumn();

for ($row = 2; $row <= $highestRow; $row++) {

$rowData = $worksheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, null, true, false);

$model = new YourModel();

// 将读取到的内容插入数据库

$model->attribute1=$rowData[0][0];

$model->attribute2=$rowData[0][1];

$model->attribute3=$rowData[0][2];

$model->save();

}

}

在上述代码中,我们使用`PHPExcel_IOFactory::load()`方法来加载Excel文件,然后使用`getActiveSheet()`方法获取当前活动工作表,使用`getHighestRow()`和`getHighestColumn()`方法获取最大行数和最大列数。然后,我们使用循环来遍历每一行,使用`rangeToArray()`方法获取行数据。在读取到的数据中,我们可以根据需要将其插入到数据库中。

4. 完善导入功能

现在,我们已经成功实现了上传并导入Excel文件的功能,但我们还可以进行一些改进。

4.1 验证文件类型

我们可以在`rules()`方法中添加验证规则,以确保只有允许的文件类型才能被上传。

public function rules()

{

return [

[['file'], 'file', 'extensions' => 'xls, xlsx'],

];

}

在上述代码中,我们使用`file`验证规则来验证文件输入字段,并使用`extensions`属性来指定允许的文件扩展名。

4.2 显示导入结果

为了让用户知道导入的结果,我们可以在视图文件中显示成功或失败的消息。

if (Yii::$app->session->hasFlash('success')) {

echo '

' . Yii::$app->session->getFlash('success') . '
';

}

if ($model->hasErrors()) {

echo '

' . $form->errorSummary($model) . '
';

}

在上述代码中,我们使用`Yii::$app->session->hasFlash()`方法来检查是否存在成功的Flash消息,使用`Yii::$app->session->getFlash()`方法来获取消息内容。如果模型存在错误,我们使用`$form->errorSummary()`方法来显示错误摘要。

总结

通过以上步骤,我们已经成功实现了使用Yii2.0框架上传Excel文件并导入到数据库的功能。首先,我们在配置文件中配置了文件上传和PHPExcel库。然后,我们创建了文件上传表单,并在控制器中实现了上传和导入功能。最后,我们进行了一些改进,如验证文件类型和显示导入结果。现在,您可以使用此方法来处理上传并导入Excel文件到您的数据库中。

后端开发标签