ตัวอย่างการอ่านข้อมูลใน excel โดยใช้ PHPExcel
[code language=”php” title=”PHPExcel_reader.php”]
<?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>’;
[/code]
พื้นฐานคือ
- บรรทัด 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