Ok so if you haven’t heard there is a great project called phpexcel. Now this has many
functionality but I’ll just cover this well because I had to do it and didn’t know hehe. This is fairly easy(once you’ve figured it out)..
functionality but I’ll just cover this well because I had to do it and didn’t know hehe. This is fairly easy(once you’ve figured it out)..
First we reference 2 files: PHPExcel.php and IOFactory.php. Important! Don’t touch these files unless you’re a complete expert.
1
2
3
| //include the following 2 filesrequire '../class/PHPExcel.php';require_once '../class/PHPExcel/IOFactory.php'; |
Now we start we create an object from the file in this example $path is my filename that is in the server like this:
So once we do that you can capture every detail of the file here I have Title, Highest Row, Highest Column, Highest ColumnIndex
$path = "filefolder/myfile.xls";So once we do that you can capture every detail of the file here I have Title, Highest Row, Highest Column, Highest ColumnIndex
1
2
3
4
5
6
7
| $objPHPExcel = PHPExcel_IOFactory::load($path);foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $worksheetTitle = $worksheet->getTitle(); $highestRow = $worksheet->getHighestRow(); // e.g. 10 $highestColumn = $worksheet->getHighestColumn(); // e.g 'F' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);} |
With that info you can get the total number of columns
1
| $nrColumns = ord($highestColumn) - 64; |
Now you can start displaying or saving to your db table. What I do here is show the user the worksheet title, how many columns and how many rows were imported.
1
2
3
| echo "File ".$worksheetTitle." has ";echo $nrColumns . ' columns';echo ' y ' . $highestRow . ' rows.'; |
Now just so the user feels warm and fuzzy I go ahead and show them the data being imported by echoing line by line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| echo 'Data: <table width="100%" cellpadding="3" cellspacing="0"><tr>';for ($row = 1; $row <= $highestRow; ++ $row) { echo '<tr>'; for ($col = 0; $col < $highestColumnIndex; ++ $col) { $cell = $worksheet->getCellByColumnAndRow($col, $row); $val = $cell->getValue(); if($row === 1) echo '<td style="background:#000; color:#fff;">' . $val . '</td>'; else echo '<td>' . $val . '</td>'; }echo '</tr>';}echo '</table>'; |
Ok and finally(I know you’ve been waiting for this. Here is my insert into statement.
I start at row 2 because obviously row 1 is your column headers. Note: if you don’t have headers then just use 1.
I start at row 2 because obviously row 1 is your column headers. Note: if you don’t have headers then just use 1.
1
| for ($row = 2; $row <= $highestRow; ++ $row) { |
Now I create an array to hold the value of each column.
1
2
3
4
5
| $val=array();for ($col = 0; $col < $highestColumnIndex; ++ $col) { $cell = $worksheet->getCellByColumnAndRow($col, $row); $val[] = $cell->getValue(); } |
And last but not least we insert.
1
2
3
4
5
6
| $sql="insert into tablename(column1, column2, column3, column4, column5, column6)values('".$val[1] . "','" . $val[2] . "','" . $val[3]. "','" . $val[4]. "','" . $val[5]. "','" . $val[6]. "')";//Run your mysql_query}}} |
And just like that you went from excel -> mysql and a nice display for the user 
Important: you must make sure that your excel files has the same amount of columns as your insert statement, so I would recommend giving them a template to download
first.
first.
No comments:
Post a Comment