ตัวอย่างการอ่านข้อมูลใน excel โดยใช้ PHPExcel
<?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
About the author