From 4eefabf7a0b86894533c0bcc4983da1de0ae6a04 Mon Sep 17 00:00:00 2001 From: Mark Baker Date: Sun, 17 Nov 2013 17:45:21 +0000 Subject: [PATCH] Modify OOCalc reader to work with PCLZip rather than ZipArchive if configured to do so --- Classes/PHPExcel/Reader/OOCalc.php | 22 ++++-- Examples/01simplePCLZip.php | 106 +++++++++++++++++++++++++++++ Examples/07readerPCLZip.php | 79 +++++++++++++++++++++ Examples/OOCalcReaderPCLZip.php | 64 +++++++++++++++++ Examples/runall.php | 2 + 5 files changed, 266 insertions(+), 7 deletions(-) create mode 100644 Examples/01simplePCLZip.php create mode 100644 Examples/07readerPCLZip.php create mode 100644 Examples/OOCalcReaderPCLZip.php diff --git a/Classes/PHPExcel/Reader/OOCalc.php b/Classes/PHPExcel/Reader/OOCalc.php index 8343e377..10642173 100644 --- a/Classes/PHPExcel/Reader/OOCalc.php +++ b/Classes/PHPExcel/Reader/OOCalc.php @@ -74,14 +74,16 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); } + $zipClass = PHPExcel_Settings::getZipClass(); + // Check if zip class exists - if (!class_exists('ZipArchive',FALSE)) { - throw new PHPExcel_Reader_Exception("ZipArchive library is not enabled"); - } +// if (!class_exists($zipClass, FALSE)) { +// throw new PHPExcel_Reader_Exception($zipClass . " library is not enabled"); +// } $mimeType = 'UNKNOWN'; // Load file - $zip = new ZipArchive; + $zip = new $zipClass; if ($zip->open($pFilename) === true) { // check if it is an OOXML archive $stat = $zip->statName('mimetype'); @@ -124,7 +126,9 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); } - $zip = new ZipArchive; + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; if (!$zip->open($pFilename)) { throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file."); } @@ -176,7 +180,9 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce $worksheetInfo = array(); - $zip = new ZipArchive; + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; if (!$zip->open($pFilename)) { throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file."); } @@ -331,7 +337,9 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce $timezoneObj = new DateTimeZone('Europe/London'); $GMT = new DateTimeZone('UTC'); - $zip = new ZipArchive; + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; if (!$zip->open($pFilename)) { throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file."); } diff --git a/Examples/01simplePCLZip.php b/Examples/01simplePCLZip.php new file mode 100644 index 00000000..ab82497c --- /dev/null +++ b/Examples/01simplePCLZip.php @@ -0,0 +1,106 @@ +'); + +/** Include PHPExcel */ +require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; + + +// Create new PHPExcel object +echo date('H:i:s') , " Create new PHPExcel object" , EOL; +$objPHPExcel = new PHPExcel(); + +// Set document properties +echo date('H:i:s') , " Set document properties" , EOL; +$objPHPExcel->getProperties()->setCreator("Maarten Balliauw") + ->setLastModifiedBy("Maarten Balliauw") + ->setTitle("PHPExcel Test Document") + ->setSubject("PHPExcel Test Document") + ->setDescription("Test document for PHPExcel, generated using PHP classes.") + ->setKeywords("office PHPExcel php") + ->setCategory("Test result file"); + + +// Add some data +echo date('H:i:s') , " Add some data" , EOL; +$objPHPExcel->setActiveSheetIndex(0) + ->setCellValue('A1', 'Hello') + ->setCellValue('B2', 'world!') + ->setCellValue('C1', 'Hello') + ->setCellValue('D2', 'world!'); + +// Miscellaneous glyphs, UTF-8 +$objPHPExcel->setActiveSheetIndex(0) + ->setCellValue('A4', 'Miscellaneous glyphs') + ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç'); + + +$objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld"); +$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1); +$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true); + + +// Rename worksheet +echo date('H:i:s') , " Rename worksheet" , EOL; +$objPHPExcel->getActiveSheet()->setTitle('Simple'); + + +// Set active sheet index to the first sheet, so Excel opens this as the first sheet +$objPHPExcel->setActiveSheetIndex(0); + + +// Save Excel 2007 file +echo date('H:i:s') , " Write to Excel2007 format" , EOL; +$callStartTime = microtime(true); + +// Use PCLZip rather than ZipArchive to create the Excel2007 OfficeOpenXML file +PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP); + +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, '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 files" , EOL; +echo 'Files have been created in ' , getcwd() , EOL; diff --git a/Examples/07readerPCLZip.php b/Examples/07readerPCLZip.php new file mode 100644 index 00000000..dc1885a5 --- /dev/null +++ b/Examples/07readerPCLZip.php @@ -0,0 +1,79 @@ +'); + +date_default_timezone_set('Europe/London'); + +/** Include PHPExcel_IOFactory */ +require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php'; + + +if (!file_exists("05featuredemo.xlsx")) { + exit("Please run 05featuredemo.php first." . EOL); +} + +// Use PCLZip rather than ZipArchive to read the Excel2007 OfficeOpenXML file +PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP); + +echo date('H:i:s') , " Load from Excel2007 file" , EOL; +$callStartTime = microtime(true); + +$objPHPExcel = PHPExcel_IOFactory::load("05featuredemo.xlsx"); + +$callEndTime = microtime(true); +$callTime = $callEndTime - $callStartTime; +echo 'Call time to read 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 date('H:i:s') , " Write to Excel2007 format" , EOL; +$callStartTime = microtime(true); + +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, '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/OOCalcReaderPCLZip.php b/Examples/OOCalcReaderPCLZip.php new file mode 100644 index 00000000..2f3f922f --- /dev/null +++ b/Examples/OOCalcReaderPCLZip.php @@ -0,0 +1,64 @@ +load("OOCalcTest.ods"); + + +$callEndTime = microtime(true); +$callTime = $callEndTime - $callStartTime; +echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , PHP_EOL; +// Echo memory usage +echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , PHP_EOL; + + +echo date('H:i:s') , " Write to Excel2007 format" , PHP_EOL; +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save(str_replace('.php', '.xlsx', __FILE__)); +echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', __FILE__) , PHP_EOL; + + +// Echo memory peak usage +echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL; + +// Echo done +echo date('H:i:s') , " Done writing file" , PHP_EOL; + diff --git a/Examples/runall.php b/Examples/runall.php index 5512b024..4d2e207f 100644 --- a/Examples/runall.php +++ b/Examples/runall.php @@ -45,6 +45,7 @@ $aTests = array( , '06largescale-with-cellcaching.php' , '06largescale-xls.php' , '07reader.php' + , '07readerPCLZip.php' , '08conditionalformatting.php' , '08conditionalformatting2.php' , '09pagebreaks.php' @@ -95,6 +96,7 @@ $aTests = array( , '38cloneWorksheet.php' , '40duplicateStyle.php' , 'OOCalcReader.php' + , 'OOCalcReaderPCLZip.php' , 'SylkReader.php' , 'Excel2003XMLReader.php' , 'XMLReader.php'