From 36eef2f16345a73b2e5c68b58bf10077b9e21d37 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Thu, 16 Jul 2015 22:29:15 +0100 Subject: [PATCH] New example to demonstrate merging two spreadsheet files into a single file --- Examples/43mergeWorkbooks.php | 91 +++++++++++++++++++++++++++ Examples/runall.php | 1 + Examples/templates/43mergeBook1.xlsx | Bin 0 -> 9629 bytes Examples/templates/43mergeBook2.xlsx | Bin 0 -> 9618 bytes 4 files changed, 92 insertions(+) create mode 100644 Examples/43mergeWorkbooks.php create mode 100644 Examples/templates/43mergeBook1.xlsx create mode 100644 Examples/templates/43mergeBook2.xlsx diff --git a/Examples/43mergeWorkbooks.php b/Examples/43mergeWorkbooks.php new file mode 100644 index 0000000..465b60a --- /dev/null +++ b/Examples/43mergeWorkbooks.php @@ -0,0 +1,91 @@ +'); + +date_default_timezone_set('Europe/London'); + +/** Include PHPExcel_IOFactory */ +require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php'; + + +echo date('H:i:s') , " Load MergeBook1 from Excel2007 file" , EOL; +$callStartTime = microtime(true); + +$objPHPExcel1 = PHPExcel_IOFactory::load(dirname(__FILE__) . "/templates/43mergeBook1.xlsx"); + +$callEndTime = microtime(true); +$callTime = $callEndTime - $callStartTime; +echo 'Call time to read Mergebook1 was ' , sprintf('%.4f',$callTime) , " seconds" , EOL; +// Echo memory usage +echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL; + + +echo date('H:i:s') , " Load MergeBook2 from Excel2007 file" , EOL; +$callStartTime = microtime(true); + +$objPHPExcel2 = PHPExcel_IOFactory::load(dirname(__FILE__) . "/templates/43mergeBook2.xlsx"); + +$callEndTime = microtime(true); +$callTime = $callEndTime - $callStartTime; +echo 'Call time to read Mergebook2 was ' , sprintf('%.4f',$callTime) , " seconds" , EOL; +// Echo memory usage +echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL; + + +foreach($objPHPExcel2->getSheetNames() as $sheetName) { + $sheet = $objPHPExcel2->getSheetByName($sheetName); + $sheet->setTitle($sheet->getTitle() . ' copied'); + $objPHPExcel1->addExternalSheet($sheet); +} + + +echo date('H:i:s') , " Write to Excel2007 format" , EOL; +$callStartTime = microtime(true); + +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007'); +$objWriter->save(str_replace('.php', '.xlsx', __FILE__)); + +$callEndTime = microtime(true); +$callTime = $callEndTime - $callStartTime; + +echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL; +echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL; +// Echo memory usage +echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL; + + +// Echo memory peak usage +echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL; + +// Echo done +echo date('H:i:s') , " Done writing file" , EOL; +echo 'File has been created in ' , getcwd() , EOL; diff --git a/Examples/runall.php b/Examples/runall.php index 3d94e4a..cad5b39 100644 --- a/Examples/runall.php +++ b/Examples/runall.php @@ -102,6 +102,7 @@ $aTests = array( , '40duplicateStyle.php' , '41password.php' , '42richText.php' + , '43mergeWorkbooks.php' , 'OOCalcReader.php' , 'OOCalcReaderPCLZip.php' , 'SylkReader.php' diff --git a/Examples/templates/43mergeBook1.xlsx b/Examples/templates/43mergeBook1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6efc05a5db1c904f332e6ddf17c938adef9f4722 GIT binary patch literal 9629 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 wBEmfRuCapwu)eDj6nA_712^