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文件到您的数据库中。