Skip to content

Commit f2b7ad7

Browse files
Merge pull request #1194 from Codeinwp/feat/pro/497
Migrated PhpSpreadsheet to OpenSpout
2 parents d2f5a6a + 755670e commit f2b7ad7

File tree

5 files changed

+86
-294
lines changed

5 files changed

+86
-294
lines changed

.distignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ artifact
1717
composer.json
1818
composer.lock
1919
package-lock.json
20-
vendor/phpoffice/phpspreadsheet/samples
21-
vendor/phpoffice/phpspreadsheet/docs
20+
vendor/openspout/openspout/LICENSE-for-*
21+
vendor/openspout/openspout/UPGRADE-3.0.md
22+
vendor/openspout/openspout/README.md
2223
cypress
2324
cypress.json
2425
.github

classes/Visualizer/Module.php

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,6 @@ public function _getDataAs( $chart_id, $type ) {
235235
}
236236

237237
$filename = $title;
238-
239238
switch ( $type ) {
240239
case 'csv':
241240
$final = $this->_getCSV( $rows, $filename, false );
@@ -324,9 +323,9 @@ private function _getCSV( $rows, $filename, $enclose ) {
324323
* @param string $filename The name of the file to use.
325324
*/
326325
private function _getExcel( $rows, $filename ) {
327-
// PHPExcel did not like sheet names longer than 31 characters and we will assume the same with PhpSpreadsheet
328-
$chart = substr( $filename, 0, 30 );
329-
$filename .= '.xlsx';
326+
// OpenSpout allows for long sheet names, but let's keep the same limit for compatibility.
327+
$chart = substr( $filename, 0, 30 );
328+
$filename .= '.xlsx';
330329
if ( ! apply_filters( 'vizualizer_export_include_series_type', true ) ) {
331330
unset( $rows[1] );
332331
$rows = array_values( $rows );
@@ -339,22 +338,32 @@ function( $r ) {
339338
}
340339
$vendor_file = VISUALIZER_ABSPATH . '/vendor/autoload.php';
341340
if ( is_readable( $vendor_file ) ) {
342-
include_once( $vendor_file );
343-
}
344-
$xlsData = '';
345-
if ( class_exists( 'PhpOffice\PhpSpreadsheet\Spreadsheet' ) ) {
346-
$doc = new PhpOffice\PhpSpreadsheet\Spreadsheet();
347-
$doc->getActiveSheet()->fromArray( $rows, null, 'A1' );
348-
$doc->getActiveSheet()->setTitle( sanitize_title( $chart ) );
349-
$doc = apply_filters( 'visualizer_excel_doc', $doc );
350-
$writer = PhpOffice\PhpSpreadsheet\IOFactory::createWriter( $doc, 'Xlsx' );
351-
ob_start();
352-
$writer->save( 'php://output' );
353-
$xlsData = ob_get_contents();
354-
ob_end_clean();
341+
include_once $vendor_file;
342+
}
343+
$xlsData = '';
344+
if ( class_exists( 'OpenSpout\Writer\Common\Creator\WriterEntityFactory' ) ) {
345+
try {
346+
// Use OpenSpout to create the XLSX file in memory.
347+
$writer = \OpenSpout\Writer\Common\Creator\WriterEntityFactory::createXLSXWriter();
348+
$writer->openToFile( 'php://output' ); // Open to output instead of a file.
349+
$writer->getCurrentSheet()->setName( sanitize_title( $chart ) );
350+
351+
// Write rows.
352+
foreach ( $rows as $row ) {
353+
$rowFromValues = \OpenSpout\Writer\Common\Creator\WriterEntityFactory::createRowFromArray( $row );
354+
$writer->addRow( $rowFromValues );
355+
}
356+
357+
ob_start();
358+
$writer->close(); // Saves and closes the file in the output buffer.
359+
$xlsData = ob_get_clean();
360+
} catch ( Exception $e ) {
361+
do_action( 'themeisle_log_event', Visualizer_Plugin::NAME, 'OpenSpout writer error: ' . $e->getMessage(), 'error', __FILE__, __LINE__ );
362+
error_log( 'OpenSpout writer error: ' . $e->getMessage() );
363+
}
355364
} else {
356-
do_action( 'themeisle_log_event', Visualizer_Plugin::NAME, 'Class PhpOffice\PhpSpreadsheet\Spreadsheet does not exist!', 'error', __FILE__, __LINE__ );
357-
error_log( 'Class PhpOffice\PhpSpreadsheet\Spreadsheet does not exist!' );
365+
do_action( 'themeisle_log_event', Visualizer_Plugin::NAME, 'Class OpenSpout\Writer\Common\Creator\WriterEntityFactory does not exist!', 'error', __FILE__, __LINE__ );
366+
error_log( 'Class OpenSpout\Writer\Common\Creator\WriterEntityFactory does not exist!' );
358367
}
359368
return array(
360369
'csv' => 'data:application/vnd.ms-excel;base64,' . base64_encode( $xlsData ),

classes/Visualizer/Render/Sidebar.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ private static function is_excel_enabled() {
270270
return false;
271271
}
272272

273-
return class_exists( 'PhpOffice\PhpSpreadsheet\Spreadsheet' ) && extension_loaded( 'zip' ) && extension_loaded( 'xml' ) && extension_loaded( 'fileinfo' );
273+
return class_exists( 'OpenSpout\Writer\Common\Creator\WriterEntityFactory' ) && extension_loaded( 'zip' ) && extension_loaded( 'xml' ) && extension_loaded( 'fileinfo' );
274274
}
275275

276276
/**

composer.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222
},
2323
"require": {
2424
"codeinwp/themeisle-sdk": "^3.3",
25-
"phpoffice/phpspreadsheet": "1.8.2",
26-
"neitanod/forceutf8": "~2.0"
25+
"neitanod/forceutf8": "~2.0",
26+
"openspout/openspout": "^3.7"
2727
},
2828
"autoload": {
2929
"files": [
30-
"vendor/codeinwp/themeisle-sdk/load.php",
31-
"vendor/phpoffice/phpspreadsheet/src/Bootstrap.php"
30+
"vendor/codeinwp/themeisle-sdk/load.php"
3231
]
3332
},
3433
"scripts": {
@@ -40,7 +39,7 @@
4039
"config": {
4140
"optimize-autoloader": true,
4241
"platform": {
43-
"php": "5.6"
42+
"php": "7.4"
4443
},
4544
"allow-plugins": {
4645
"dealerdirect/phpcodesniffer-composer-installer": true

0 commit comments

Comments
 (0)