ตัวอย่างการอ่านข้อมูลใน excel โดยใช้ PHPExcel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?php /* PHPExcel_IOFactory - Reader */ include 'PHPOffice/PHPExcel/Classes/PHPExcel/IOFactory.php' ; $inputFileName = 'importsDatas.xlsx' ; $inputFileType = PHPExcel_IOFactory::identify( $inputFileName ); $objReader = PHPExcel_IOFactory::createReader( $inputFileType ); $objReader ->setReadDataOnly(true); $objPHPExcel = $objReader ->load( $inputFileName ); /* select sheet */ $objWorksheet = $objPHPExcel ->setActiveSheetIndex(0); /* range of datas */ $highestColumn = $objWorksheet ->getHighestColumn(); $highestColumnNumber = PHPExcel_Cell::columnIndexFromString( $highestColumn ); $highestRow = $objWorksheet ->getHighestRow(); echo '<!doctype html>' , '<html>' , '<head>' , '<meta charset="utf-8">' , '<title>PHPExcel Reader</title>' , '<body>' , '<table border="1" width="100%"><caption>Highest Row = ' , $highestRow , ' Highest Column = ' , $highestColumn , ' (' , $highestColumnNumber , ')</caption><tbody>' ; for ( $rowNo = 1; $rowNo <= $highestRow ; $rowNo ++) { echo '<tr>' ; for ( $colNo = 0; $colNo < $highestColumnNumber ; $colNo ++) { $colString = PHPExcel_Cell::stringFromColumnIndex( $colNo ); $coordinate = $colString . $rowNo ; $cell = $objWorksheet ->getCell( $coordinate ); $value = trim( $cell ->getValue()); echo '<td>' , $value , ' <sup>' , $coordinate , '</sup></td>' ; } echo '</tr>' ; } echo '</tbody></table></body></html>' ; |
พื้นฐานคือ
- บรรทัด 8 – 13 ให้ PHPExcel อ่านจากไฟล์ไหน เป็น excel version ไหน setReadDataOnly บอกว่าให้เปิดเพืออ่านข้อมูลอย่างเดียวนะ มันจะเร็วกว่าเพราะไม่ต้องเตรียมการเพื่อเขียนข้อมูลด้วย
- setActiveSheetIndex จะบอกว่าให้อ่าน sheet ไหน โดยเริ่มนับจาก 0 ไม่ใช่ 1
- บรรทัด 19 – 23 เป็นการหาขอบเขตที่มีการเขียนข้อมูลเอาไว้ เพราะว่าไม่ต้องการให้ loop ไปอ่านเรื่อยๆโดยที่ไม่มีข้อมูลอะไรเลย เปลืองทรัพยากร เสียเวลาไปเปล่าๆ
- บรรทัด 33 – 35 เป็นการ loop อ่านข้อมูล มาสร้างเป็น coordinate อย่าง G1, G2, G3, …, G7 แล้วแต่ว่าจะเขียนเงื่อนไขให้เริ่มอ่านจากจุดไหน เพราะบางไฟล์แถวแรกๆ จะเป็น header ไม่ใช่ข้อมูล สาเหตุที่ต้องใช้ columnIndexFromString ทั้งๆที่มี getHighestColumn แล้ว เพราะว่าต้องการลำดับ column เอาไป loop จะใช้ตัวอักษรไป loop ไม่ได้
- บรรทัด 41 ใช้ getCell ดึงข้อมูลออกมาใช้ทีละ coordinate
อ่านเพิ่มเติม Import วันที่โดย PHPExcel