当前位置: 首页 > 后端技术 > PHP

用PHP读取Excel和CSV文件

时间:2023-03-30 01:59:57 PHP

PHP璇诲彇excel鍜宑sv鏂囦欢鐨勫簱鏈夊緢澶氾紝涓嶈繃鐢ㄧ殑鏈€澶氱殑鏈夛細PHPOffice/PHPExcel銆丳HPOffice/PhpSpreadsheet锛岀幇鍦≒HPExcel涓嶅啀缁存姢锛屾渶鏂扮殑鎻愪氦杩樻槸2017骞?2鏈?5鏃ワ紝鎺ㄨ崘鐩存帴浣跨敤PhpSpreadsheet锛屼袱涓」鐩兘鏄悓涓€涓満鏋勭淮鎶ょ殑銆傛湰鏂囦粙缁峆hpSpreadsheet鐨勪娇鐢ㄣ€備粙缁峆hpSpreadsheetPhpSpreadsheet鏄竴涓敤绾疨HP缂栧啓鐨勫簱锛屾彁渚涗簡闈炲父涓板瘜鐨勭被鍜屾柟娉曪紝鏀寔澶氱鏂囦欢鏍煎紡锛氱幆澧冭姹侾HP>=5.6鍚敤php_zip鎵╁睍鍚敤php_xml鎵╁睍鍚敤php_gd2鎵╁睍寮€濮嬩娇鐢煒勬潵鍐欎釜绠€鍗曠殑demo,To瀛︿範PhpSpreadsheet鐨勪娇鐢紝澶ф灏辨槸涓€涓畝鍗曠殑鏂囦欢涓婁紶椤甸潰锛屼笂浼犳垜浠璇诲彇鐨凟xcel鏂囦欢锛孭HP鎺ユ敹鏂囦欢锛岃皟鐢≒hpSpreadsheet璇诲彇Excel涓殑鍐呭銆?.閰嶇疆鐜鐣?..锛岃嚜宸遍厤缃€傛垜褰撳墠鐨凱HP鐗堟湰鏄?.2.131銆傚垱寤轰竴涓柊椤圭洰mkdirdemocddemo2銆備娇鐢╟omposer瀹夎锛歝omposerrequirephpoffice/phpspreadsheet榛樿瀹夎鏈€鏂扮殑绋冲畾鐗堬紙1.5锛夛紝濡傛灉瑕佸畨瑁卍ev鐗堬紝鍙互鎵ц浠ヤ笅鍛戒护锛歝omposerrequirephpoffice/phpspreadsheet:develop浠ヤ笂姝ラ瀹屾垚鍚庯紝鐩綍缁撴瀯濡備笅锛?.鍒涘缓涓€涓畝鍗曠殑html鏂囦欢涓婁紶Excel鏂囦欢vimindex.htmlindex.html涓殑鍐呭寰堢畝鍗曪紝濡備笅锛氳繖閲屾敞鎰忥細formform鐨別nctype蹇呴』鏄痬ultipart/form-data杩欏彧鏄竴涓畝鍗曠殑demo锛屼竴涓猣orm琛ㄥ崟灏卞ソ浜嗭紝杩愯鍚庢槸杩欐牱鐨?)4.PhpSpreadsheet濡備綍浣跨敤锛熷湪澶勭悊鍓嶇浼犺繃鏉ョ殑Excel鏂囦欢涔嬪墠锛屽厛浠嬬粛涓€涓婸hpSpredsheet鐨勪娇鐢ㄦ柟娉曘€?.1璇诲彇鏂囦欢PhpSpreadsheet璇诲彇鏂囦欢鐨勬柟寮忔湁寰堝绉嶏紝涓嶅悓鏍煎紡鐨勬枃浠舵湁涓嶅悓鐨勮鍙栨柟寮忥紝濡傦細xlsx鏍煎紡锛屼娇鐢╘PhpOffice\PhpSpreadsheet\Reader\Xlsx()锛宑sv鏍煎紡锛屼娇鐢╘PhpOffice\PhpSpreadsheet\Reader\Csv()锛屼箥涓€鐪嬭繖涔堝绫绘劅瑙夋湁鐐瑰鏉傦紝鍏跺疄杩欎簺绫婚兘瀹炵幇浜哱PhpOffice\PhpSpreadsheet\Reader\IReader鍜孿PhpOffice\PhpSpreadsheet\Writer\IWriter鎺ュ彛锛屾寚瀹氫簡鏂囦欢鐨勭被鍨嬪緟鍔犺浇銆傛垜浠彲浠ョ洿鎺ヤ娇鐢ㄥ伐鍘傜被\PhpOffice\PhpSpreadsheet\IOFactory锛?spreadsheet=\PhpOffice\PhpSpreadsheet\IOFactory::load('demo.xlsx');濡傛灉鎯冲湪璇诲啓鏂囦欢鏃惰缃竴浜涘睘鎬э紝姣斿璇诲啓灞炴€э紝鍙互杩欐牱璁剧疆锛?reader=\PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile("demo.xlsx");$reader->setReadDataOnly(true);$reader->load("demo.xlsx");浣跨敤杩欎釜宸ュ巶绫荤殑濂藉鏄綘涓嶉渶瑕佸叧蹇冩枃浠朵笂浼犵殑鏍煎紡锛屽畠鍙互鑷姩璇嗗埆銆傚叾瀹炶繖涓伐鍘傜被灏辨槸瀵逛綘涓婁紶鐨勬枃浠跺仛涓€浜涜瘑鍒€傚鏋滆瘑鍒负xls鏍煎紡锛屽垯杩斿洖xls闃呰鍣ㄣ€傚鏋滄槸csv锛屽氨杩斿洖csv鐨剅eader銆傞€氳繃鍒嗘瀽浠g爜锛屾垜浠彲浠ョ湅鍒拌繖涓狪OFactory鍙互浜х敓濡備笅鐨剅eader鍜寃riters锛?class,'Xml'=>Reader\Xml::class,'Ods'=>Reader\Ods::class,'Slk'=>Reader\Slk::class,'Gnumeric'=>Reader\Gnumeric::class,'Html'=>Reader\Html::class,'Csv'=>Reader\Csv::class,];privatestatic$writers=['Xls'=>Writer\Xls::class,'Xlsx'=>Writer\Xlsx::class,'Ods'=>Writer\Ods::class,'Csv'=>Writer\Csv::class,'Html'=>Writer\Html::class,'Tcpdf'=>Writer\Pdf\Tcpdf::class,'Dompdf'=>Writer\Pdf\Dompdf::class,'Mpdf'=>Writer\Pdf\Mpdf::class,];...鍙互鐪嬪埌鏀寔鐨勭被鍨嬭繕鏄尯澶氱殑锛屼絾鏄緢澶氶兘涓嶅父鐢ㄥ湪IOFactory宸ュ巶涓紝杩樺彲浠ユ寚瀹氳鍐欑殑鏂囦欢绫诲瀷锛岃繑鍥炲搴旂殑reader锛岀渷鍘讳簡璇嗗埆鏂囦欢绫诲瀷鐨勬楠わ紝濡備笅锛?reader=\PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");//鎸囧畾xlsx鏍煎紡$spreadsheet=$reader->load("demo.xlsx");4.2浠庢簮鐮佷笂姣旇緝涓ょ璇诲啓鏂瑰紡棣栧厛鎴戜滑鏉ョ湅IOFactory宸ュ巶绫汇€傚綋鎴戜滑涓嶆寚瀹氶槄璇诲櫒绫诲瀷鏃讹紝鎴戜滑鐩存帴鍔犺浇銆備唬鐮侀噷闈㈡槸涓€涓瘑鍒牸寮忕殑鎿嶄綔锛?/婧愮爜鍒嗘瀽//涓嶆寚瀹歳eader锛岀洿鎺ヨ幏鍙栦笂浼犳枃浠跺垱寤?reader=\PhpOffice\PhpSpreadsheet\IOFactory::load($_FILES['file']['tmp_name']);//IOFactory::load()publicstaticfunctionload($pFilename){//杩欎竴姝ユ槸鍒涘缓reader锛岀渷鍘绘墜鍔ㄥ垱寤?reader=self::createReaderForFile($p鏂囦欢鍚?;return$reader->load($pFilename);}//IOFactory::createReaderForFile()//杩欎竴姝ユ槸杩斿洖涓€涓猺eader锛岃繑鍥炰粈涔坮eader鏄牴鎹枃浠跺悕鏉ョ殑銆俻ublicstaticfunctioncreateReaderForFile($filename){//鍒ゆ柇鏂囦欢鏄惁瀛樺湪涓斿彲璇伙紝浼氭姏鍑篒nvalidArgumentExceptionFile::assertFile($filename);//鏍规嵁鏂囦欢鍚庣紑鐚滄祴绫诲瀷$guessedReader=self::getReaderTypeFromExtension($filename);濡傛灉($guessedReader!==null){$reader=self::createReader($guessedReader);//璁╂垜浠湅鐪嬫垜浠槸鍚﹀垢杩恑f(isset($reader)&&$reader->canRead($filename)){return$reader;}}//濡傛灉娌℃湁妫€娴嬪埌绫诲瀷锛屽畠灏嗛亶鍘嗛粯璁ょ殑闃呰鍣ㄦ暟缁勶紝鐩村埌鎵惧埌鍙互浣跨敤鐨勯槄璇诲櫒foreach(self::$readersas$type=>$class){if($type!==$guessedReader){$reader=self::createReader($type);濡傛灉($reader->canRead($filename)){return$reader;}}}thrownewReader\Exception('Unabletoidentifyareaderforthisfile');}浠庝笂闈㈢殑浠g爜鍙互鐪嬪嚭锛屽湪鍔犺浇涔嬪墠鍋氫簡鏂囦欢妫€娴嬪拰绫诲瀷鍒ゆ柇鐨勬搷浣滐紝鐒跺悗杩斿洖瀵瑰簲鐨剅eader锛屾帴涓嬫潵鐪嬬湅鎴戜滑鎸囧畾绫诲瀷鍚庡仛浜嗗摢浜涙搷浣滐細'tmp_name']);涓婇潰姣旇緝绠€鍗曪紝鐩存帴鍒涘缓涓€涓猺eader锛岀劧鍚庡姞杞斤紝鍋氫竴浜涘疄渚嬪寲鎿嶄綔灏卞彲浠ヤ簡銆傝繖涓ょ鏂规硶鏄浉鍏崇殑锛岀浜岀鏂规硶鐨勬€ц兘瑕佸ソ涓€鐐癸紝褰撶劧鍓嶆彁鏄煡閬撴枃浠舵牸寮忋€?.璇诲彇Excel鏂囦欢鐨勫唴瀹规垜浠户缁笂闈㈢殑index.html锛屾垜浠渶瑕佸啓涓€涓狿HP鏂囦欢鏉ュ鐞嗚姹傦細require'vendor/autoload.php';$reader=new\PhpOffice\PhpSpreadsheet\Reader\Xlsx()锛涘皾璇晎$spreadsheet=$reader->load($_FILES['file']['tmp_name']);}catch(\PhpOffice\PhpSpreadsheet\Reader\Exception$e){die($e->getMessage());}$sheet=$spreadsheet->getActiveSheet();$res=鏁扮粍();foreach($sheet->getRowIterator(2)as$row){$tmp=array();foreach($row->getCellIterator()as$cell){$tmp[]=$cell->getFormattedValue();$res[$row->getRowIndex()]=$tmp;}echojson_encode($res);鎴戜滑鍏堝紩鍏utoload锛岀劧鍚庡垱寤轰竴涓猉lsx闃呰鍣紝鐒跺悗鍔犺浇鎴戜滑涓婁紶鐨勬枃浠讹紝鍥犱负鍦╡xcel涓紝鍐呭鏄互sheet鏉ュ尯鍒嗙殑锛屾瘡涓猻heet閮芥槸鐢辫鍜屽垪缁勬垚鐨勶紝鎴戜滑鑾峰彇褰撳墠浣跨敤鐨剆heet锛岄€氳繃sheet琛岀殑杩唬瀵硅薄锛岀劧鍚庤幏鍙栨瘡涓€琛岀殑姣忎竴鍒楀璞°€傚湪PhpSpreadsheet涓紝鍗曞厓鏍兼槸鏈€灏忕殑鍗曚綅锛屽搴旇鍜屽垪锛屾暟鎹瓨鍌ㄥ湪鍗曞厓鏍间腑銆傛嬁鍒癱ell瀵硅薄灏卞彲浠ユ嬁鍒版暟鎹簡銆傛垜浠笂浼犱互涓嬪唴瀹瑰悗锛氳繑鍥炵粨鏋滃涓嬶細鍥犱负鎴戜滑闃呰鏃舵槸浠庣浜岃寮€濮嬬殑锛屾墍浠ヤ笉浼氭樉绀虹涓€琛岀殑鍐呭銆傝繖閲屽厛璇翠竴涓嬶紝Excel涓涓夊垪鏄椂闂达紝PhpSpreadsheet瀵规椂闂寸殑澶勭悊鏈夌偣鐗规畩銆傚湪PhpSpreadsheet涓紝鏃ユ湡鍜屾椂闂撮兘瀛樺偍涓烘暟瀛椼€傚綋闇€瑕佸皢鏁板瓧鍖哄垎涓烘椂闂存牸寮忔椂锛岄渶瑕佷娇鐢ㄦ牸寮忔帺鐮併€傞粯璁ゆ儏鍐典笅锛屾牸寮忔帺鐮佹槸寮€鍚殑锛屼絾鏄鏋滀綘璁剧疆setReadDataOnly绛変簬true锛岄偅涔堝皢鏃犳硶浣跨敤鏍煎紡鎺╃爜锛岃繖鏍峰氨鏃犳硶鍖哄垎鏁板瓧鍜屾椂闂存牸寮忥紝PhpSpreatsheet浼氬叏閮ㄥ綋鍋氭暟瀛楀鐞嗐€傛鏃舵垜浠墦寮€鍙妯″紡鐪嬬湅锛?reader=new\PhpOffice\PhpSpreadsheet\Reader\Xlsx();$reader->setReadDataOnly(true);杈撳嚭缁撴灉濡備笅锛氱涓夊垪鍙樻垚浜嗕竴涓鎬殑鏁板瓧锛岃繖涓棶棰樿繕鏄洶鎵颁簡鎴戝緢涔呫€?銆丳hpSpreadsheet璇诲彇鏂囦欢鐨勪竴浜涘父鐢ㄦ柟娉曞鏋滀竴涓狤xcel涓湁澶氫釜宸ヤ綔琛紝鑰屼綘鍙兂鎿嶄綔鍏朵腑鐨勪竴閮ㄥ垎锛屽彲浠ヨ缃畇etLoadSheetsOnly$reader=new\PhpOffice\PhpSpreadsheet\Reader\Xlsx();//鍙傛暟鏀寔瀛楃涓叉垨鏁扮粍$reader->setLoadSheetsOnly(['sheet1','sheet3']);璇诲彇鎸囧畾琛屽拰鍒楃殑鏁版嵁classMyReadFilterimplements\PhpOffice\PhpSpreadsheet\Reader\IReadFilter{publicfunctionreadCell($column,$row,$worksheetName=''){//鍙鍙朅1:E7鐨勬暟鎹甶f($row>=1&&$row<=7){if(in_array($column,range('A','E'))){杩斿洖鐪燂紱}}杩斿洖鍋囷紱}}$myFilter=newMyReadFilter();$reader=new\PhpOffice\PhpSpreadsheet\Reader\Xlsx();$reader->setReadFilter($filterSubset);$spreadsheet=$reader->load('demo.xlsx');涓婇潰鐨勪緥瀛愪笉澶熼€氱敤锛屼綘鍙互淇敼瀹冧娇瀹冩洿閫氱敤锛歝lassMyReadFilterimplements\PhpOffice\PhpSpreadsheet\Reader\IReadFilter{private$startRow=0;绉佷汉$endRow=0;绉佹湁$columns=[];鍏叡鍑芥暟__construct($startRow,$endRow,$columns){$this->startRow=$startRow;$this->endRow=$endRow;$this->columns=$columns;}publicfunctionreadCell($column,$row,$worksheetName=''){if($row>=$this->startRow&&$row<=$this->endRow){if(in_array($column,$this->鍒楋級锛墈杩斿洖鐪燂紱}}杩斿洖鍋囷紱}}$myFilter=newMyReadFilter(9,15,['A','B','D']);鍒楀嚭Excel涓墍鏈夊伐浣滆〃鐨勫悕绉?reader->listWorksheetNames('demo.xlsx');鍒楀嚭涓€涓猻heet鐨勪俊鎭紝鍖呮嫭澶氬皯鍒楋紝澶氬皯琛?reader->listWorksheetInfo('demo.xlsx');PhpSpreadsheet鐨勫涔犲拰浣跨敤鍒版缁撴潫銆傚畠鐪熺殑寰堝己澶э紝鍑犱箮鍙互婊¤冻鎵€鏈夋棩甯搁渶姹傘€傚畠鏄鍙朎xcel鍜孋SV鏂囦欢鐨勫己澶у伐鍏?/p>