|
PHPExcel กับ Reader การอ่านไฟล์ Excel (.xls,.xlsx) และการนำเข้าฐานข้อมูล MySQL |
PHPExcel กับ Reader การอ่านไฟล์ Excel (.xls,.xlsx) และการนำเข้าฐานข้อมูล MySQL บทความและเทคนิคการใช้ Class ของ PHPExcel ในการอ่าน (reader) ไฟล์ Excel ที่อยู่ในรูปแบบนามสกุล .xls (Office 2003) และ .xlsx (Office 2007) โดยนำข้อมูลจาก Excel มาแสดงผลบนหน้าเว็บ หรือ นำเข้าสู่ฐานข้อมูล MySql สำหรับ Class ตัวนี้เป็น Open Source สามารถใช้งานได้ฟรี และยังสามารถรอบรับการทำงานได้ทั้งบน Windows Server และ Linux Server รูปแบบการใช้งานง่าย และ มี Demo ให้ศึกษาได้หลายตัว
Screenshot
ไฟล์ Excel
แสดงผลบนเว็บ
นำเข้าฐานข้อมูล MySQL
คุณสมบัติของ PHPExcel Library
- รองรับไฟล์ .xls (Office 2003) และ .xlsx (Office 2007)
- อ่านได้เร็วกกว่าการใช้ COM บน Windows
- รองรับหลาย Platform ทั้ง Windows และ Linux
- ใช้งานง่าย และที่สำคัญ มันฟรี ไม่มีหมดอายุ
Download PHPExcel Library
ตัวอย่างที่ 1 การอ่านไฟล์ Excel แล้วแสดงผลบนหน้าเว็บไซต์
ไฟล์ Excel ที่ต้องการอ่านด้วย PHPExcel
PHPExcelRead.php
<?php
/** PHPExcel */
require_once 'Classes/PHPExcel.php';
/** PHPExcel_IOFactory - Reader */
include 'Classes/PHPExcel/IOFactory.php';
$inputFileName = "myData.xls";
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
/*
// for No header
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$r = -1;
$namedDataArray = array();
for ($row = 1; $row <= $highestRow; ++$row) {
$dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true);
if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
++$r;
$namedDataArray[$r] = $dataRow[$row];
}
}
*/
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true);
$headingsArray = $headingsArray[1];
$r = -1;
$namedDataArray = array();
for ($row = 2; $row <= $highestRow; ++$row) {
$dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true);
if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
++$r;
foreach($headingsArray as $columnKey => $columnHeading) {
$namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
}
}
}
//echo '<pre>';
//var_dump($namedDataArray);
//echo '</pre><hr />';
?>
<table width="500" border="1">
<tr>
<td>CustomerID</td>
<td>Name</td>
<td>Email</td>
<td>CountryCode</td>
<td>Budget</td>
<td>Used</td>
</tr>
<?php
foreach ($namedDataArray as $result) {
?>
<tr>
<td><?php echo $result["CustomerID"];?></td>
<td><?php echo $result["Name"];?></td>
<td><?php echo $result["Email"];?></td>
<td><?php echo $result["CountryCode"];?></td>
<td><?php echo $result["Budget"];?></td>
<td><?php echo $result["Used"];?></td>
</tr>
<?php
}
?>
</table>
ในตัวอย่าง จะเป็นการอ่าน Excel เข้ามาอยู่ในรูปแบบของ Array
โดยถูกจัดเก็บไว้ที่ $namedDataArray เมื่อใช้ var_dump($namedDataArray); จะได้ค่า Array เป็นดังนี้
array(4) {
[0]=>
array(6) {
["CustomerID"]=>
string(4) "C001"
["Name"]=>
string(13) "Win Weerachai"
["Email"]=>
string(28) "[email protected]"
["CountryCode"]=>
string(2) "TH"
["Budget"]=>
float(1000000)
["Used"]=>
float(600000)
}
[1]=>
array(6) {
["CustomerID"]=>
string(4) "C002"
["Name"]=>
string(11) "John Smith"
["Email"]=>
string(25) "[email protected]"
["CountryCode"]=>
string(2) "EN"
["Budget"]=>
float(2000000)
["Used"]=>
float(800000)
}
[2]=>
array(6) {
["CustomerID"]=>
string(4) "C003"
["Name"]=>
string(9) "Jame Born"
["Email"]=>
string(24) "[email protected]"
["CountryCode"]=>
string(2) "US"
["Budget"]=>
float(3000000)
["Used"]=>
float(600000)
}
[3]=>
array(6) {
["CustomerID"]=>
string(4) "C004"
["Name"]=>
string(12) "Chalee Angel"
["Email"]=>
string(27) "[email protected]"
["CountryCode"]=>
string(2) "US"
["Budget"]=>
float(4000000)
["Used"]=>
float(100000)
}
}
จะเห็นว่าจะมีการนำแถวแรกของ Excel มาเป็น Key ของ Array แต่ถ้าไม่ต้องการอ้างอิง header ในการสร้าง Key สามารถใช้ในส่วนที่ได้ remark ไว้ว่า // for No header
Screenshot
ผลลลัพธ์ที่ได้เมื่อทำการทำการแทรก HTML ในสาวนของ table เพื่อแสดงข้อมูลออกมารูปแบบของตาราง
ตัวอย่างที่ 2 การอ่านไฟล์ Excel แล้วทำการ Import หรือ Insert ลงในฐานข้อมูล MySQL
ก่อนอื่นให้สร้างตารางชื่อว่า customer ใน phpMyAdmin โดยนำ SQL นี้ไป Query
CREATE TABLE `customer` (
`CustomerID` varchar(4) NOT NULL,
`Name` varchar(50) NOT NULL,
`Email` varchar(50) NOT NULL,
`CountryCode` varchar(2) NOT NULL,
`Budget` double NOT NULL,
`Used` double NOT NULL,
PRIMARY KEY (`CustomerID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
จะได้ฐานตารางชื่อว่า customer
PHPExcelReadToMySQL.php
<?php
/** PHPExcel */
require_once 'Classes/PHPExcel.php';
/** PHPExcel_IOFactory - Reader */
include 'Classes/PHPExcel/IOFactory.php';
$inputFileName = "myData.xls";
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true);
$headingsArray = $headingsArray[1];
$r = -1;
$namedDataArray = array();
for ($row = 2; $row <= $highestRow; ++$row) {
$dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true);
if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
++$r;
foreach($headingsArray as $columnKey => $columnHeading) {
$namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
}
}
}
//echo '<pre>';
//var_dump($namedDataArray);
//echo '</pre><hr />';
//*** Connect to MySQL Database ***//
$objConnect = mysql_connect("localhost","root","root") or die(mysql_error());
$objDB = mysql_select_db("mydatabase");
$i = 0;
foreach ($namedDataArray as $result) {
$i++;
$strSQL = "";
$strSQL .= "INSERT INTO customer ";
$strSQL .= "(CustomerID,Name,Email,CountryCode,Budget,Used) ";
$strSQL .= "VALUES ";
$strSQL .= "('".$result["CustomerID"]."','".$result["Name"]."' ";
$strSQL .= ",'".$result["Email"]."','".$result["CountryCode"]."' ";
$strSQL .= ",'".$result["Budget"]."','".$result["Used"]."') ";
mysql_query($strSQL) or die(mysql_error());
echo "Row $i Inserted...<br>";
}
mysql_close($objConnect);
?>
Screenshot
ทดสอนรันโปรแกรมแสดงจำนวน Rows ที่ได้ Insert
เมื่อเปิดด้วย phpMyAdmin ก็จะพบกับข้อมูลที่ได้ Insert หรือ Import เข้าไป
สรุป
สรุปการใช้คลาสของ PHPExcel ซึ่งเป็น Library ที่ดีที่สุดที่นิยมใช้ในขณะนี้ จะสามารถช่วยในเรื่องเกี่ยวกับการจัดการเอกสาร Excel ได้เป็นอย่างดี สำหรับ Code ตัวอย่างสามรถดาวนืโหลดได้จากข่างล้างของบทความ
ผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยครับ
Download Code !!
บทความอื่น ๆ ที่เกี่ยวข้อง
Go to : สร้าง Excel (xls,xlsx) ไฟล์ด้วย PHPExcel และการส่งออก Export จากฐานข้อมูล MySQL Database
|
|
|
|
|
|
|
|
By : |
TC Admin
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
|
|
Create Date : |
2012-05-10 |
|
Download : |
No files |
|
Sponsored Links |
|
|
|
|
|
|