PHP(3):PHP读取Excel文件的记录-方法1
因為工作需要將Excel的文件記錄讀出再寫入數據庫中,之前使用的是VBS,可是那也不是正規的應用程序,使用PowerBuilder也可以,但是PowerBuilder畢竟只是臨時使用,C#好長時間不用了,就打算使用最近學習的PHP來操作。
下班后就開始干,折騰了將近4個小時,終于搞定了,遇到了好多的坑,快崩潰了,想一想為這些膚淺的代碼所累,程序員的日子不好過!
要使用PHP讀取Excel的文件記錄,查了資料都是使用PHPExcel這個文件包,并且全部都要使用Composer來安裝,結果遇到了第一個坑:Composer始終安裝不上PHPOffice/PHPExcel。
首先安裝Composer。
composer require phpoffice/phpspreadsheet,后面可加版本號也可以不加。
可能是因為我們上外網代理的緣故,始終安裝不上,好不容易安裝上了,使用Composer始終安裝不上PHPOffice/PHPExcel,各種莫名其妙的錯誤提示。
接下來我下載了JetBrains PhpStorm,在它里面進行安裝,錯誤提示變了一些,可是還不行,打開OPENSSL和下載證書也還是不行。
為這個耗費了3個小時,真心快崩潰了,想一想為什么別人可以呢?
為什么一定要Composer安裝?其實安裝不過是將PHPOffice的信息寫到配置文件,方便程序員在編程環境下進行代碼提示、錯誤檢測還有后期的運行提示,不安裝又怎樣?
在網上下載一個付費的PHPOFFICE,解包到一個目錄,引用一下,按照網上的方式讀取,結果幾十行的錯誤提示:
Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Shared\String.php on line 526 ...... Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Reader\Excel5.php on line 1928 ...... Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Calculation.php on line 2551 ...... Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Worksheet\AutoFilter.php on line 720 ...... Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Cell.php on line 812這個意思是:不推薦使用:不推薦使用帶大括號的數組和字符串偏移量訪問語法,這個顯示有幾十行,讓人沮喪,因為類庫是別人寫的,本來打算放棄的,將網頁拉到最后,竟然有數據記錄讀出來,真是讓人驚喜,意味著只要解決這個錯誤就可以了。
逐個打開有錯誤提示的文件,將數組的“{}”訪問方式改成“[]”,錯誤太多了改了半個小時,問題解決了。
正確的代碼:
<?php error_reporting(E_ALL);//報告所有錯誤 date_default_timezone_set('PRC'); //設置時區為中國/** PHPExcel_IOFactory */ require_once './Classes/PHPExcel/IOFactory.php'; $excelFilename="安裝記錄111.xlsx";$ext=substr($excelFilename,strripos($excelFilename,'.')); $dataSheet=[];if($ext=='.xlsx'){//按Excel2007文件格式讀取$reader = PHPExcel_IOFactory::createReader('Excel2007');$reader->setReadDataOnly(true);$spreadSheet=$reader->load($excelFilename);$workSheet=$spreadSheet->getActiveSheet();foreach($workSheet->getRowIterator() as $key=>$row){$cellIterator=$row->getCellIterator();$cellIterator->setIterateOnlyExistingCells(false);foreach($cellIterator as $k=>$cell){$dataSheet[$key][$k]=$cell->getValue();}} }elseif($ext=='.xls'){//以Excel5(Excel97-2003工作簿)的格式讀取$reader = PHPExcel_IOFactory::createReader('Excel5');//加載excel文件$PHPExcel = $reader->load("WPS安裝記錄.xls");//讀取第一個工作表$sheet = $PHPExcel->getSheet(0);//獲取總行數$highestRow = $sheet->getHighestRow();//獲取總列數$highestColumm = $sheet->getHighestColumn();//讀取單元格的數據(從第一行,A列開始先行后列)for ($row = 1; $row <= $highestRow; $row++){for ($column = 'A'; $column <= $highestColumm; $column++) {$dataSheet[] = $sheet->getCell($column.$row)->getValue();}} }else{exit("不能識別{$excelFilename}.\n"); }print_r($dataSheet);?>搞定!文件記錄全部顯示出來,既可以讀取后綴為xls的文件也可以讀取xlsx的文件。
后面就是寫入數據庫了。
這個方法還是有點麻煩,后面找其他的方法,至少ODBC應該是可以的。
總結
以上是生活随笔為你收集整理的PHP(3):PHP读取Excel文件的记录-方法1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【线性代数笔记】秩为1的矩阵的性质
- 下一篇: php pdf转为word,免费pdf转