>php教程 >php手册 >Thinkphp는 PHPExcel을 사용하여 Excel을 가져옵니다.

Thinkphp는 PHPExcel을 사용하여 Excel을 가져옵니다.

PHP中文网
PHP中文网원래의
2016-08-29 08:36:481154검색

PHPExcel(백과사전: Microsoft의 OpenXML 표준 및 PHP 언어를 기반으로 Office Excel 문서를 조작하는 데 사용되는 PHP 클래스 라이브러리)을 사용하여 간단한 Excel 가져오기를 만들었습니다.

자, 이제 시작하겠습니다. ..

먼저 PHPExcel 클래스 라이브러리가 있어야 합니다. 여기를 클릭하여 https://github.com/Zmwherein/PHPExcel.git

을 다운로드한 다음 ThinkPHPLibraryVendor에 넣습니다(개인 취향, 임포트 가능한 한)

그림과 같이

PHPExcel.php는 엔트리 파일과 유사하게 들어가서 메소드가 어떻게 작성되어 있는지 볼 수 있습니다. 실행됩니다...

인터페이스는 다음과 같습니다.

먼저 파일이 업로드되었는지 판단해 보겠습니다. 최적화하고 더 잘 쓰겠지만 당분간 개인 능력은 한계가 있습니다) )


 1 public function import() 
 2     { 
 3         // p($data_in_db); 
 4         if ( ! empty($_FILES)) 
 5         { 
 6             $upload = new \Think\Upload(); 
 7             $upload -> maxSize   =  3145728 ; 
 8             $upload -> exts      =  array('xlsx', 'xls'); 
 9             $upload -> rootPath  =  './'; // 设置附件上传根目录
 10             $upload  -> savePath =  '/Upload/excel/'; // 设置附件上传(子)目录
 11             $upload -> subName   =  false;
 12             $upload -> saveName  =  'time';
 13             
 14             $info   =   $upload -> uploadOne($_FILES['import']);
 15             
 16             if( ! $info)
 17             {
 18                 $this->error($upload->getError());
 19             }


그럼 실행하세요 PHPExcel.php 및 PHPExcel/IOFactory.php 파일을 가져오고


1 //导入PHPExcel 和 IOFactory类
2 Vendor('PHPExcel.PHPExcel');
3 Vendor('PHPExcel.PHPExcel.IOFactory');


가져오기 때문에 , createReader 메소드

가 호출됩니다.


$objReader = \PHPExcel_IOFactory::createReader('Excel5');


업로드된 파일이 있는 경로를 설정합니다. 파일 로드


$objPHPExcel = $objReader -> load($file_path, $encode='utf-8');


여기서 우리가 말하는 것은 A에서 통과한 행 수입니다. E로 (직접 정의, 원하는 것을 선택) 여기서는 2번부터 시작해야 합니다. 첫 번째 행은 데이터가 아니라 헤더이기 때문입니다


 1 $sheet = $objPHPExcel -> getSheet(0);
 2             $highestRow = $sheet -> getHighestRow(); // 取得总行数 
 3             // p($highestRow); 
 4             // $highestColumn = $sheet->getHighestColumn(); // 取得总列数 
 5              
 6             for($i=2;$i4123fba1fcfcfad9a4fd34e25e20aaa9 getActiveSheet() -> getCell("A".$i)->getValue(); 
 9     $data['company']   = $objPHPExcel -> getActiveSheet() -> getCell("B".$i)->getValue();
 10    $data['mobile']    = $objPHPExcel -> getActiveSheet() -> getCell("C".$i)->getValue();
 11     $data['category']  = $objPHPExcel -> getActiveSheet() -> getCell("D".$i)->getValue();
 12    $data['mark']      = $objPHPExcel -> getActiveSheet() -> getCell("E".$i)->getValue();
 13                 
 14                 $allData[] = $data;
 15             }
 16             // p($allData);


테스트 테이블은 이렇습니다

이제 $allData를 출력하고 보세요

보세요, 데이터가 나왔습니다...

다음 단계는 다음으로 가져오는 것입니다. 데이터베이스 ->가져오기 전에 작은 판단을 해야 합니다. 예를 들어 데이터베이스의 전화번호가 나를 따르도록 하려면 가져오려는 데이터가 동일하면 다음과 같이 가져오지 마세요. -> ; 더 좋은 방법 있으신 분 계신가요?


 1  if (empty($allData)) 
 2             { 
 3                 $this -> error(C('MESSAGE.ERROR_NODATA')); 
 4             } 
 5             $data_in_db = M('Excel') -> field('mobile') -> select();//表Excel里所有数据 
 6             foreach ($data_in_db as $key => $val) 
 7             { 
 8                 foreach ($allData as $k => $v) 
 9                 {
 10                     if ($val['mobile'] == $v['mobile'])
 11                     {
 12                         unset($allData[$k]);
 13                     }
 14                 }
 15             }


가져올 때 두가지 방법이 있습니다. sql을 splice하는 것이고, 또 하나는 foreach 루프를 이용하여 import하는 것입니다

실제 테스트에서는 첫 번째 방법이 sql import를 splice하는 것이 훨씬 빠릅니다... 하지만 import하는 경우 데이터가 너무 크면 스플라이싱된 SQL이 매우 길어서 데이터가 상대적으로 클 것입니다...

가끔 실행 파일 타임아웃 오류가 발생하거나 1153 ‘보다 큰 패킷이 발생하는 경우가 있습니다. ;max_allowed_packet’바이트 OR

서버가 바로 멈추고 다음과 같은 오류가 보고됩니다

이 경우 my.ini에서 max_allowed_packet을 약간 더 크게 설정하도록 수정해야 합니다. , MySql을 다시 시작하세요

좋습니다.. 잠시만 기다리면 거의 2W의 데이터를 가져옵니다(^_^)

이상입니다. 제가 작성한 insert 문


 1 $sql = "INSERT INTO `db_excel` (". implode(',',array_keys($allData[0])) .") VALUES "; 
 2             foreach ($allData as $key => $val) 
 3             { 
 4                 $sql .= "("; 
 5                 $sql .= "'".implode("','", $val)."'"; 
 6                 $sql .= "),"; 
 7             } 
 8             $sql = rtrim($sql,','); 
 9             // 出错返回false 否则返回成功行数
 10             $res = D('Excel') -> execute($sql);
 11             if ($res === false)
 12             {
 13                 $this -> error(C('MESSAGE.ERROR_IMPORT'));
 14             }
 15             else if ($res > 0)
 16             {
 17                 $this -> success(C('MESSAGE.SUCCESS_IMPORT'), U('Excel/index'));
 18             }
 19             else if ($res === 0)
 20             {
 21                 $this -> success(C('MESSAGE.SUCCESS_IMPORT_0'), U('Excel/index'));
 22             }


좋습니다. 위는 PHPExcel을 사용하여 Excel 파일을 가져오는 것입니다. .

아직 수정해야 할 부분이 많은데, 지적해 주시면 좋겠습니다.

위 내용은 PHPExcel을 사용하여 Thinkphp의 Excel을 가져오는 방법에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.