From 678b40bb244da58f35c1c1346142173006ddbecb Mon Sep 17 00:00:00 2001 From: Mark Baker Date: Wed, 29 Sep 2010 22:26:10 +0000 Subject: [PATCH] Added 30template.php test git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@61678 2327b42d-5241-43d6-9e2a-de5ac946f064 --- Tests/30template.php | 89 +++++++++++++++++++++++++++++++++ Tests/runall.php | 7 ++- Tests/templates/30template.xls | Bin 0 -> 39424 bytes 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 Tests/30template.php create mode 100644 Tests/templates/30template.xls diff --git a/Tests/30template.php b/Tests/30template.php new file mode 100644 index 00000000..65d7b227 --- /dev/null +++ b/Tests/30template.php @@ -0,0 +1,89 @@ +load("templates/30template.xls"); + + + + +echo date('H:i:s') . " Add new data to the template\n"; +$data = array(array('title' => 'Excel for dummies', + 'price' => 17.99, + 'quantity' => 2 + ), + array('title' => 'PHP for dummies', + 'price' => 15.99, + 'quantity' => 1 + ), + array('title' => 'Inside OOP', + 'price' => 12.95, + 'quantity' => 1 + ) + ); + +$objPHPExcel->getActiveSheet()->setCellValue('D1', PHPExcel_Shared_Date::PHPToExcel(time())); + +$baseRow = 5; +foreach($data as $r => $dataRow) { + $row = $baseRow + $r; + $objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1); + + $objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $r+1); + $objPHPExcel->getActiveSheet()->setCellValue('B'.$row, $dataRow['title']); + $objPHPExcel->getActiveSheet()->setCellValue('C'.$row, $dataRow['price']); + $objPHPExcel->getActiveSheet()->setCellValue('D'.$row, $dataRow['quantity']); + $objPHPExcel->getActiveSheet()->setCellValue('E'.$row, '=C'.$row.'*D'.$row); +} +$objPHPExcel->getActiveSheet()->removeRow($baseRow-1,1); + + + + +echo date('H:i:s') . " Write to Excel5 format\n"; +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); +$objWriter->save(str_replace('.php', '.xls', __FILE__)); + + + + +// Echo memory peak usage +echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB\r\n"; + +// Echo done +echo date('H:i:s') . " Done writing file.\r\n"; diff --git a/Tests/runall.php b/Tests/runall.php index b4c4eb12..0d979d43 100644 --- a/Tests/runall.php +++ b/Tests/runall.php @@ -8,12 +8,12 @@ * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA @@ -59,9 +59,12 @@ $aTests = array( , '27imagesexcel5.php' , '28iterator.php' , '29advancedvaluebinder.php' + , '30template.php' , 'OOCalcReader.php' , 'SylkReader.php' + , 'Excel2003XMLReader.php' , 'XMLReader.php' + , 'GnumericReader.php' ); // First, clear all results diff --git a/Tests/templates/30template.xls b/Tests/templates/30template.xls new file mode 100644 index 0000000000000000000000000000000000000000..af8de03b8df9a081dc61cd2aa5c4c6ad52be8b1d GIT binary patch literal 39424 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