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)를 참고하세요!