天天看點

phpexcel導入并且有錯時标記出檔案錯位位置

public function actionImport()//excel導入
    {
        $model = new CrmCustomerImportForm();
        $ok = "";
        if (Yii::$app->request->isPost) {
//        if ($model->load(Yii::$app->request->post())) {
            $file = UploadedFile::getInstance($model, 'file');  //擷取上傳的檔案執行個體
            if ($file) {
                $filename = time().'.'.$file->extension;
                $filename = time();
                $file->saveAs($filename.'.'.$file->extension);//儲存檔案
                /*exit;
                $format = $file->extension;*/
                if(in_array($file->extension,array('xls','xlsx','csv'))){
                    if($file->extension =='xlsx')
                    {
                        $objReader = new \PHPExcel_Reader_Excel2007();
                        $objPHPExcel = $objReader ->load($file);
                    }
                    else if ($file->extension =='xls')
                    {
                        $objReader = new \PHPExcel_Reader_Excel5();
                        $objPHPExcel = $objReader ->load($file);
                    }
                    else if ($file->extension=='csv')
                    {
                        $PHPReader = new \PHPExcel_Reader_CSV();
                        $PHPReader->setInputEncoding('GBK');//預設輸入字元集
                        $PHPReader->setDelimiter(',');//預設的分隔符
                        $objPHPExcel = $PHPReader->load($file);//載入檔案
                    }
                    else
                    {
                        die('檔案格式不對!');
                    }
                    $objWorksheet = $objPHPExcel->getSheet(0);//載入檔案并擷取第一個sheet
                    $highestRow = $objWorksheet->getHighestRow();//總行數
                    $highestColumn = $objWorksheet->getHighestColumn();//總列數
//                    $highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn); //将字母變為數字
                    if($highestRow > 1){






                        $transaction=Yii::$app->db->beginTransaction();
                        try {
                            $tableData = [];
                            $err = [];
                            for($row = 2; $row <= $highestRow; $row++){
                            $data = [];
                            for($col = 'A'; $col <= $highestColumn; $col++){
                                $data[] = trim($objWorksheet->getCell($col.$row)->getValue());//列字母不轉換為數字時的寫法
                            }
                            $tableData[] = $data;

                            $customer = new CrmCustomerImportForm();
                            $customer->name = $data[0];
                            $customer->gender = $data[1];
                            $customer->get_way = $data[2];
                            $customer->phone = $data[3];
                            $customer->tel = $data[4];
                            $customer->wechat = $data[5];
                            $customer->email = $data[6];
                            $customer->qq = $data[7];
                            $customer->birthday = str_replace('/', '-', $data[8]);
                            $customer->caller = $data[9];
                            $customer->street = $data[10];
                            $customer->remark = $data[11];
                                //判斷是否達到上限
//                                if (!$this->checkmaxuser((new OrgSearch())->getOrg())){
//                                    throw new Exception('達到上限了!');
//                                };
                                if(!$customer->validate())
                                {
                                    throw new Exception(reset($customer->getFirstErrors()));
                                }
                                //判斷使用者是否已存在
                                $existUser = $customer->getCrmCustomer();
                                if ($existUser) {
//                                    $objectPHPExcel = new PHPExcel();
//                                    $objectPHPExcel->setActiveSheetIndex(0);
//                                    header('Content-Type : application/vnd.ms-excel');
//                                    header('Content-Disposition:attachment;filename="'.$filename.'"');
//                                    if($file->extension =='xlsx')
//                                    {
////                                        $objReader = new \PHPExcel_Reader_Excel2007();
////                                        $objPHPExcel = $objReader ->load($file);
//                                        $objWriter= PHPExcel_IOFactory::createWriter($filename,'Excel2007');
//                                        $objWriter->save('php://output');
//
//                                    }
//                                    else if ($file->extension =='xls')
//                                    {
////                                        $objReader = new \PHPExcel_Reader_Excel5();
////                                        $objPHPExcel = $objReader ->load($file);
//                                        $objWriter= PHPExcel_IOFactory::createWriter($filename,'Excel5');
//                                        $objWriter->save('php://output');
//
//                                    }
//                                    else if ($file->extension=='csv')
//                                    {
////                                        $PHPReader = new \PHPExcel_Reader_CSV();
////                                        $PHPReader->setInputEncoding('GBK');//預設輸入字元集
////                                        $PHPReader->setDelimiter(',');//預設的分隔符
////                                        $objPHPExcel = $PHPReader->load($file);//載入檔案
//                                        $objWriter= PHPExcel_IOFactory::createWriter($filename,'CSV');
//                                        $objWriter->save('php://output');
//                                    }
//                                    throw new Exception('使用者已存在'.$existUser->phone);


                                    //儲存可保不同檔案名,格式不變
//                                    $objWriter = new PHPExcel_Writer_Excel2007($PHPExcel,'PDF');
//                                    $objWriter->save('./sndemo1.xlsx');
//                                    dump($PHPExcel);

//                                    var_dump($row);die;
                                    if($file->extension =='xlsx')
                                    {
                                        $objReader = new \PHPExcel_Reader_Excel2007();
                                        $objPHPExcel = $objReader ->load($filename.'.'.$file->extension);
                                        $currentSheet = $objPHPExcel->getSheet(0);
                                        $currentSheet->getStyle('A'.$row.':'.$col.$row)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                            ->getStartColor()->setARGB('D1E17E'); //設定标題背景顔色

                                        /** 輸出到指定目錄 */
                                        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
                                        $objWriter->save($filename.'.'.$file->extension);//檔案儲存路徑

                                        /** 輸出到浏覽器直接下載下傳打開 */
                                        header('Content-Type:application/vnd.ms-excel'); //指定下載下傳檔案類型
                                        header('Content-Disposition: attachment; filename="'.$filename.'.xlsx"'); //指定下載下傳檔案的描述
                                        header('Content-Length:'.filesize($filename.'.'.$file->extension)); //指定下載下傳檔案的大小

                                        /**  将檔案内容讀取出來并直接輸出,以便下載下傳 */
                                        readfile($filename.'.'.$file->extension);
                                    }
                                    else if ($file->extension =='xls')
                                    {
                                        $objReader = new \PHPExcel_Reader_Excel5();
                                        $objPHPExcel = $objReader ->load($filename.'.'.$file->extension);
                                        $currentSheet = $objPHPExcel->getSheet(0);
                                        $currentSheet->getStyle('A'.$row.':'.$col.$row)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                            ->getStartColor()->setARGB('D1E17E'); //設定标題背景顔色

                                        /** 輸出到指定目錄 */
                                        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
                                        $objWriter->save($filename.'.'.$file->extension);//檔案儲存路徑

                                        /** 輸出到浏覽器直接下載下傳打開 */
                                        header('Content-Type:application/vnd.ms-excel'); //指定下載下傳檔案類型
                                        header('Content-Disposition: attachment; filename="'.$filename.'.xls"'); //指定下載下傳檔案的描述
                                        header('Content-Length:'.filesize($filename.'.'.$file->extension)); //指定下載下傳檔案的大小

                                        /**  将檔案内容讀取出來并直接輸出,以便下載下傳 */
                                        readfile($filename.'.'.$file->extension);
                                    }
                                    else if ($file->extension=='csv')
                                    {
                                        $PHPReader = new \PHPExcel_Reader_CSV();
//                                        $PHPReader->setInputEncoding('GBK');//預設輸入字元集
//                                        $PHPReader->setDelimiter(',');//預設的分隔符
                                        $objPHPExcel = $PHPReader->load($filename.'.'.$file->extension);//載入檔案
                                        $currentSheet = $objPHPExcel->getSheet(0);
                                        $currentSheet->getStyle('A'.$row.':'.$col.$row)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                                            ->getStartColor()->setARGB('D1E17E'); //設定标題背景顔色
//                                        $currentSheet->setCellValue($col.$row,'CPU使用率:');//表頭指派//

                                        /** 輸出到指定目錄 */
                                        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
                                        $objWriter->save($filename.'.'.$file->extension);//檔案儲存路徑


                                        /** 輸出到浏覽器直接下載下傳打開 */
                                        header('Content-Type:application/vnd.ms-excel'); //指定下載下傳檔案類型
                                        header('Content-Disposition: attachment; filename="'.$filename.'.csv"'); //指定下載下傳檔案的描述
                                        header('Content-Length:'.filesize($filename.'.'.$file->extension)); //指定下載下傳檔案的大小

                                        /**  将檔案内容讀取出來并直接輸出,以便下載下傳 */
                                        readfile($filename.'.'.$file->extension);

//                                        $objPHPExcel->getActiveSheet()->setTitle('User');
//                                        $objPHPExcel->setActiveSheetIndex(0);
//                                        header('Content-Type: application/vnd.ms-excel');
//                                        header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
//                                        header('Cache-Control: max-age=0');
//                                        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//                                        $objWriter->save('php://output');
//
                                    }

//                                    unlink($filename.'.'.$file->extension);
//                                    $objWriter = new PHPExcel_Writer_Excel2007($PHPExcel,'PDF');
//                                    $objWriter->save('./sndemo1.xlsx');
//                                    dump($PHPExcel);







//                                    $objPHPExcel = PHPExcel_IOFactory::load($filename);
//                                    $sheet = $objPHPExcel->getSheet(0); // 讀取第一個工作表
//                                    $highestColumm = $sheet->getHighestColumn(); // 取得總列數
//                                    $highestRow = $sheet->getHighestRow(); // 取得總行數
//
                                    /** 循環讀取每個單元格的資料 */
//                                    $i = 2;
//                                    foreach ($list as $key => $value) {
//                                        $objPHPExcel->setActiveSheetIndex(0)
//                                            ->setCellValue('Z'.$i, $value['demo'])
//                                            ->setCellValue('AA'.$i, $value['demo']);
//                                        $i++;
//                                    }

//                                    $objPHPExcel->getActiveSheet()->setTitle('Simple');
//                                    $objPHPExcel->setActiveSheetIndex(0);

                                    /** 輸出到指定目錄 */
//                                    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//                                    $objWriter->save('simple.xlsx');//檔案儲存路徑


//                                    /** 輸出到浏覽器直接下載下傳打開 */
//                                    header('Content-Type:application/vnd.ms-excel'); //指定下載下傳檔案類型
//                                    header('Content-Disposition: attachment; filename="'.$filename.'"'); //指定下載下傳檔案的描述
//                                    header('Content-Length:'.filesize($filename)); //指定下載下傳檔案的大小
//
//                                    /**  将檔案内容讀取出來并直接輸出,以便下載下傳 */
//                                    readfile($filename);

                                }
                                //crm_customer表添加客戶
                                if(!$customer->saveCustomer()){
                                    throw new Exception('客戶導入失敗');
                                };
                        }
                            $transaction->commit();
                        } catch (Exception $e) {
                            $transaction->rollBack();
//                                throw $e;
                            $err= $e->getMessage();
                        }







                    }
//                    unlink($filename);
                    if ($ok == 1){
//                        $this->redirect(array('index'));
                    } else{
                        Yii::$app->session->setFlash('error', $err);
                    }
                }
            }
            else
            {
                Yii::$app->session->setFlash('error', '請上傳檔案!');
            }
        }else{
            return $this->render('import',[
                'model'=>$model
            ]);
        }
        return $this->render('import',[
            'model'=>$model
        ]);
    }           

複制

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate Close