Initial commit to support Cell styling and number formats in styles
This commit is contained in:
parent
e9cd7a397e
commit
4f5218dbc9
@ -167,6 +167,11 @@ abstract class AbstractWorkbook implements WorkbookInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function applyStyleToCurrentWorksheet($style) {
|
||||||
|
$updatedStyle = $styleHelper->applyExtraStylesIfNeeded($style, array());
|
||||||
|
$registeredStyle = $styleHelper->registerStyle($updatedStyle);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return bool Whether the current worksheet has reached the maximum number of rows per sheet.
|
* @return bool Whether the current worksheet has reached the maximum number of rows per sheet.
|
||||||
*/
|
*/
|
||||||
|
@ -61,6 +61,13 @@ class Style
|
|||||||
/** @var bool Whether the wrap text property was set */
|
/** @var bool Whether the wrap text property was set */
|
||||||
protected $hasSetWrapText = false;
|
protected $hasSetWrapText = false;
|
||||||
|
|
||||||
|
/** @var string Custom number format */
|
||||||
|
protected $numberFormat = '';
|
||||||
|
/** @var boolean Whether specific number format has been set */
|
||||||
|
protected $hasSetNumberFormat = false;
|
||||||
|
/** @var integer Holds the number format id */
|
||||||
|
protected $numberFormatId = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return int|null
|
* @return int|null
|
||||||
*/
|
*/
|
||||||
@ -243,6 +250,35 @@ class Style
|
|||||||
return $this->shouldApplyFont;
|
return $this->shouldApplyFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setNumberFormat($format)
|
||||||
|
{
|
||||||
|
$this->numberFormat = $format;
|
||||||
|
$this->hasSetNumberFormat = true;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setNumberFormatId($id)
|
||||||
|
{
|
||||||
|
$this->numberFormatId = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function shouldApplyNumberFormat()
|
||||||
|
{
|
||||||
|
return $this->hasSetNumberFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNumberFormatId()
|
||||||
|
{
|
||||||
|
return $this->numberFormatId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNumberFormat()
|
||||||
|
{
|
||||||
|
return $this->numberFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializes the style for future comparison with other styles.
|
* Serializes the style for future comparison with other styles.
|
||||||
* The ID is excluded from the comparison, as we only care about
|
* The ID is excluded from the comparison, as we only care about
|
||||||
|
@ -121,6 +121,12 @@ class StyleBuilder
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setNumberFormat($format)
|
||||||
|
{
|
||||||
|
$this->style->setNumberFormat($format);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the configured style. The style is cached and can be reused.
|
* Returns the configured style. The style is cached and can be reused.
|
||||||
*
|
*
|
||||||
|
@ -25,6 +25,7 @@ class StyleHelper extends AbstractStyleHelper
|
|||||||
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
||||||
EOD;
|
EOD;
|
||||||
|
|
||||||
|
$content .= $this->getNumberFormatSectionContent();
|
||||||
$content .= $this->getFontsSectionContent();
|
$content .= $this->getFontsSectionContent();
|
||||||
$content .= $this->getFillsSectionContent();
|
$content .= $this->getFillsSectionContent();
|
||||||
$content .= $this->getBordersSectionContent();
|
$content .= $this->getBordersSectionContent();
|
||||||
@ -39,6 +40,31 @@ EOD;
|
|||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getNumberFormatSectionContent() {
|
||||||
|
$formats = array();
|
||||||
|
$numberFormatCount = 0;
|
||||||
|
// This is the limit excel holds for the default number formats
|
||||||
|
$baseNumberFormatId = 163;
|
||||||
|
|
||||||
|
foreach($this->getRegisteredStyles() as $style) {
|
||||||
|
/* If this evals to false we should skip it since it isnt used */
|
||||||
|
if ($style->shouldApplyNumberFormat()) {
|
||||||
|
$numberFormatCount++;
|
||||||
|
$style->setNumberFormatId($baseNumberFormatId + $numberFormatCount);
|
||||||
|
$formats[] = '<numFmt numFmtId="'.$style->getNumberFormatId().'" formatCode="'.$style->getNumberFormat().'"/>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($numberFormatCount == 0){
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = '<numFmts count="'.$numberFormatCount.'">';
|
||||||
|
$content .= implode('', $formats);
|
||||||
|
$content .= '</numFmts>';
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the content of the "<fonts>" section.
|
* Returns the content of the "<fonts>" section.
|
||||||
*
|
*
|
||||||
@ -139,7 +165,11 @@ EOD;
|
|||||||
$content = '<cellXfs count="' . count($registeredStyles) . '">';
|
$content = '<cellXfs count="' . count($registeredStyles) . '">';
|
||||||
|
|
||||||
foreach ($registeredStyles as $style) {
|
foreach ($registeredStyles as $style) {
|
||||||
$content .= '<xf numFmtId="0" fontId="' . $style->getId() . '" fillId="0" borderId="0" xfId="0"';
|
$content .= '<xf numFmtId="'.$style->getNumberFormatId().'" fontId="' . $style->getId() . '" fillId="0" borderId="0" xfId="0"';
|
||||||
|
|
||||||
|
if ($style->shouldApplyNumberFormat()) {
|
||||||
|
$content .= ' applyNumberFormat="1"';
|
||||||
|
}
|
||||||
|
|
||||||
if ($style->shouldApplyFont()) {
|
if ($style->shouldApplyFont()) {
|
||||||
$content .= ' applyFont="1"';
|
$content .= ' applyFont="1"';
|
||||||
|
@ -58,6 +58,10 @@ class Workbook extends AbstractWorkbook
|
|||||||
$this->sharedStringsHelper = new SharedStringsHelper($xlFolder);
|
$this->sharedStringsHelper = new SharedStringsHelper($xlFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerStyle($style) {
|
||||||
|
$this->styleHelper->registerStyle($style);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \Box\Spout\Writer\XLSX\Helper\StyleHelper Helper to apply styles to XLSX files
|
* @return \Box\Spout\Writer\XLSX\Helper\StyleHelper Helper to apply styles to XLSX files
|
||||||
*/
|
*/
|
||||||
|
@ -133,10 +133,18 @@ EOD;
|
|||||||
|
|
||||||
$rowXML = '<row r="' . $rowIndex . '" spans="1:' . $numCells . '">';
|
$rowXML = '<row r="' . $rowIndex . '" spans="1:' . $numCells . '">';
|
||||||
|
|
||||||
foreach($dataRow as $cellValue) {
|
foreach($dataRow as $cell) {
|
||||||
|
if (is_array($cell)) {
|
||||||
|
$cellValue = $cell[0];
|
||||||
|
$cellStyle = $cell[1];
|
||||||
|
} else {
|
||||||
|
$cellValue = $cell;
|
||||||
|
$cellStyle = $style;
|
||||||
|
}
|
||||||
|
|
||||||
$columnIndex = CellHelper::getCellIndexFromColumnIndex($cellNumber);
|
$columnIndex = CellHelper::getCellIndexFromColumnIndex($cellNumber);
|
||||||
$cellXML = '<c r="' . $columnIndex . $rowIndex . '"';
|
$cellXML = '<c r="' . $columnIndex . $rowIndex . '"';
|
||||||
$cellXML .= ' s="' . $style->getId() . '"';
|
$cellXML .= ' s="' . $cellStyle->getId() . '"';
|
||||||
|
|
||||||
if (CellHelper::isNonEmptyString($cellValue)) {
|
if (CellHelper::isNonEmptyString($cellValue)) {
|
||||||
if ($this->shouldUseInlineStrings) {
|
if ($this->shouldUseInlineStrings) {
|
||||||
|
@ -64,6 +64,10 @@ class Writer extends AbstractMultiSheetsWriter
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function registerStyle($style) {
|
||||||
|
$this->book->registerStyle($style);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the write and sets the current sheet pointer to a new sheet.
|
* Configures the write and sets the current sheet pointer to a new sheet.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user