在保存到数据库之前,Yii2在视图中显示来自phpexcel的数据

时间:2016-01-20 03:17:20

标签: yii2 phpexcel

我仍然在学习Yii 2框架的过程。我能够创建一个上传excel文件然后使用phpexcel保存到数据库的表单。我想以这样的方式增强它,即上传的excel中的数据将显示在视图中的表上,以便用户可以检查数据是否与excel文件相同。检查后,用户将有两个选项,无论是CANCEL还是CONTINUE。

这是我的控制器方法来读取文件并保存:

public function importExcel($model, $readFile, $dir)
{
    try {
        $readFileType = \PHPExcel_IOFactory::identify($readFile);
        $objReader = \PHPExcel_IOFactory::createReader($readFileType);
        $objPHPExcel = $objReader->load($readFile);
    }
    catch(Exception $e) {
        die('Error reading data from excel file.');
    }

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

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

        $rowData = $sheet->rangeToArray('A'. $row . ':' . $highestCol . $row, NULL, TRUE, FALSE);
        $objPHPExcel->getActiveSheet()
            ->getStyle('A'. $row . ':' . $highestCol . $row)
            ->getNumberFormat()->setFormatCode('0000');
        //   ->setFormatCode( \PHPExcel_Style_NumberFormat::FORMAT_TEXT );
        if($row == 9) {
            continue;
        }

        $document = new Document();
        $document->type_id = ($rowData[0][0] == 'Ordinance' ? 1 : 2);
        $document->no = $rowData[0][1];
        $document->series = $rowData[0][2];
        $document->title = $rowData[0][3];
        $document->author = $rowData[0][5];
        $document->date_approved = date('Y-m-d', strtotime($rowData[0][8].' '.$rowData[0][9].' '.$rowData[0][10]));
        $document->region_c = $model->region_c;
        $document->province_c = $model->province_c;
        $document->citymun_c = $model->citymun_c;
        $document->catParent = 1;
        $document->category_id = 1;
        $document->file_url = $dir . '/unzip/' . $rowData[0][13];
        $document->save();

    }
}    

2 个答案:

答案 0 :(得分:0)

如果你的rowData包含数据,并且是行读取形式excel的数组,你可以这样做

$provider = new ArrayDataProvider([
   'allModels' => $rowData,
  'pagination' => [
    'pageSize' => 10,
  ],
]);


  return $this->render('your:view', [
        'provider'             => $provider,
    ]);

并在您的grdiView

<?= GridView::widget([
    'dataProvider' => $provider,
    ......

答案 1 :(得分:0)

我做到了这一点并且有效。

try {
        $readFileType = \PHPExcel_IOFactory::identify($readFile);
        $objReader = \PHPExcel_IOFactory::createReader($readFileType);
        $objPHPExcel = $objReader->load($readFile);

    }
    catch(Exception $e) {
        die('Error reading data from excel file.');
    }

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


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

        $rowData = $sheet->rangeToArray('A'. $row . ':' . $highestCol . $row, NULL, TRUE, FALSE);
        $objPHPExcel->getActiveSheet()
            ->getStyle('A'. $row . ':' . $highestCol . $row)
            ->getNumberFormat()->setFormatCode('0000');

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

        $data[] = array(
            'type' => $rowData[0][0],
            'no' => $rowData[0][1],
            'series' => $rowData[0][2],
            'title' => $rowData[0][3],
            'author' => $rowData[0][5],
            'dateapproved' => date('Y-m-d', strtotime($rowData[0][8].' '.$rowData[0][9].' '.$rowData[0][10])),
            'file' => $rowData[0][13]
        );

    }

    $dataProvider = new ArrayDataProvider([
        'allModels' => $data,
        'pagination' => [
            'pageSize' => 10,
        ],
    ]);

    return $this->render('display', [
        'dataProvider' => $dataProvider,
    ]);

}