diff --git a/testbench/test.php b/testbench/test.php
index ba7ca4c4d..bc2519ded 100644
--- a/testbench/test.php
+++ b/testbench/test.php
@@ -15,9 +15,12 @@
$data2 = array(
array('2003','01','343.12'),
array('2003','02','345.12'),
+ array('2003','02', ['Vencedor', 'SaoPaulo'], ['Perdedor', 'Flamengo']),
);
$writer = new XLSXWriter();
$writer->setAuthor('Some Author');
+$writer->addStyle('SaoPaulo', 'FFFFFF', 'FF0000', true);
+$writer->addStyle('Flamengo', 'FF0000', '000000', false);
$writer->writeSheet($data1,'Sheet1',$header);
$writer->writeSheet($data2,'Sheet2');
$writer->writeToFile('test.xlsx');
diff --git a/testbench/xlsxwriter.class.Test.php b/testbench/xlsxwriter.class.Test.php
index a84198c20..d9b25a494 100644
--- a/testbench/xlsxwriter.class.Test.php
+++ b/testbench/xlsxwriter.class.Test.php
@@ -77,6 +77,20 @@ public function testWriteToFile()
$this->assertEmpty($r2);
}
+ public function testCustomStyle()
+ {
+ $filename = tempnam("/tmp", "xlsx_writer");
+ $file_writer = new XLSXWriter_BuffererWriter($filename);
+
+ $xlsx_writer = new _XLSXWriter_();
+ $xlsx_writer->addStyle('test', 'FFFFFF', 'FFFFFF');
+ $xlsx_writer->writeCell($file_writer, 0, 0, '0123', 'test');
+ $file_writer->close();
+ $cell_xml = file_get_contents($filename);
+ $this->assertEquals('0', $cell_xml);
+ @unlink($filename);
+ }
+
private function stripCellsFromSheetXML($sheet_xml)
{
$output=array();
diff --git a/xlsxwriter.class.php b/xlsxwriter.class.php
index 085e294a7..213abfc45 100644
--- a/xlsxwriter.class.php
+++ b/xlsxwriter.class.php
@@ -20,6 +20,10 @@ class XLSXWriter
protected $current_sheet = '';
+ protected $fonts = [];
+ protected $fills = [];
+ protected $styles = [];
+
public function __construct()
{
if(!ini_get('date.timezone'))
@@ -31,6 +35,21 @@ public function __construct()
public function setAuthor($author='') { $this->author=$author; }
+ public function addStyle(string $name, string $font_color, string $background_color, bool $bold = false): void {
+ $this->fonts[] = [
+ $font_color,
+ $bold
+ ];
+ $this->fills[] = [
+ $background_color
+ ];
+ $this->styles[$name] = [
+ count($this->fonts) + 5,
+ count($this->fills) + 3,
+ 7 + count($this->styles),
+ ];
+ }
+
public function __destruct()
{
if (!empty($this->temp_files)) {
@@ -279,7 +298,7 @@ protected function writeCell(XLSXWriter_BuffererWriter &$file, $row_number, $col
'blackheader' => 6
);
$cell = self::xlsCell($row_number, $column_number);
- $s = isset($styles[$cell_format]) ? $styles[$cell_format] : '0';
+ $s = $styles[$cell_format] ?? $this->styles[$cell_format][2] ?? '0';
if (!is_scalar($value) || $value==='') { //objects, array, empty
$file->write('');
@@ -314,17 +333,23 @@ protected function writeStylesXML()
$file->write( '');
$file->write( '');
$file->write('');
- $file->write('');
+ $file->write('');
$file->write( '');
$file->write( '');
$file->write( '');
$file->write( '');
$file->write( '');
+ foreach($this->fonts as [$color, $bold]) {
+ $file->write( '');
+ }
$file->write('');
- $file->write('');
+ $file->write('');
$file->write(' ');
$file->write(' ');
$file->write(' ');
+ foreach($this->fills as [$color]) {
+ $file->write(' ');
+ }
$file->write('');
$file->write('');
$file->write( '');
@@ -352,7 +377,7 @@ protected function writeStylesXML()
$file->write( '');
$file->write( '');
$file->write( '');
- $file->write( '');
+ $file->write( '');
$file->write( '');
$file->write( '');
$file->write( '');
@@ -360,6 +385,9 @@ protected function writeStylesXML()
$file->write( '');
$file->write( '');
$file->write( '');
+ foreach($this->styles as [$font_id, $fill_id, $_]) {
+ $file->write( '');
+ }
$file->write( '');
$file->write( '');
$file->write( '');