Modificar el tamaño de letra (o el estilo) del título de un gráfico con PHPExcel o PHPSpreadsheet

publicado por: Anonymous

Al crear un archivo excel con PHPExcel o PHPspreadSheet, quiero modificar el tamaño de letra (o el estilo) del título de un gráfico. ¿Cómo puedo hacerlo?

introducir la descripción de la imagen aquí

Adjunto mi código. El código es correcto, no genera ningún error y los gráficos se imprimen correctamente.

$title= new PhpOfficePhpSpreadsheetChartTitle("titulo", null);
$title->getFont()->setSize(10);

$chart = new PhpOfficePhpSpreadsheetChart(
    'chart1',   // name
    $title,       // title
    $legend,       // legend
    $plotArea,  // plotArea
    true,       // plotVisibleOnly
    0,          // displayBlanksAs
    $xAxisLabel,       // xAxisLabel
    $yAxisLabel        // yAxisLabel
);

Clase Title:

<?php

namespace PhpOfficePhpSpreadsheetChart;
use PhpOfficePhpSpreadsheetStyleFont;

class Title
{
    /**
     * Title Caption.
     *
     * @var string
     */
    private $caption;

    /**
     * Title Layout.
     *
     * @var Layout
     */
    private $layout;

     /**
     * Title Font
     *
     * @var Font
     */
    private $font;


    /**
     * Create a new Title.
     *
     * @param null|mixed $caption
     * @param null|Layout $layout
    */
    public function __construct($caption = null, Layout $layout = null)
    {
        $this->caption = $caption;
        $this->layout = $layout;
        $this->font = new PhpOfficePhpSpreadsheetStyleFont();
    }

    /**
     * Get caption.
     *
     * @return string
     */
    public function getCaption()
    {
       return $this->caption;
    }

    /**
     * Set caption.
     *
     * @param string $caption
     *
     * @return Title
     */
    public function setCaption($caption)
    {
       $this->caption = $caption;

       return $this;
    }

    /**
     * Get Layout.
     *
     * @return Layout
     */
    public function getLayout()
    {
        return $this->layout;
    }


    /**
     * Get font
     *
     * @return Font
     */
    public function getFont() {
        return $this->font;
    }
    /**
     * Set font
     *
     * @param Font $font
     * @return Title
     */
    public function setFont( PhpOfficePhpSpreadsheetStyleFont $font = null)  {
        $this->font = $font;
        return $this;
    }
}

He ecnontrado este post:
https://github.com/PHPOffice/PHPExcel/pull/688
Siguiendo las indicaciones del post he modificado la clase chart.php , la clase StringTable.php y la clase Title.

Classes/PhpSpreadsheet/Writer/Xlsx/Chart.php

private function writeTitle(Title $title = null, $objWriter)
    if ((is_array($caption)) && (count($caption) > 0)) {
        $caption = $caption[0];
    }
    //$this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a');
    $pRichText =new PhpOfficePhpSpreadsheetRichTextRichText();
    $pRichText->createTextRun($caption);
    $elements = $pRichText->getRichTextElements();
    foreach ($elements as $element) {
        $element->setFont($title->getFont());
    }
    $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $pRichText, 'a');
    $objWriter->endElement();
    $objWriter->endElement();

En la clase StringTable, he añadido las lineas de código necesarias para modificar el tamaño de la letra del título del gráfico, puesto que no había ninguna linea relacionada con el tamaño de la letra. Para que no haya errores, he puesto directamente a mano que tenga una tamaño de 10pt ($objWriter->writeAttribute(‘val’, 10))

Classes/PhpSpreadsheet/Writer/Xlsx/StringTable.php

 /**
 * Write Rich Text.
 *
 * @param XMLWriter $objWriter XML Writer
 * @param RichText|string $pRichText text string or Rich text
 * @param string $prefix Optional Namespace prefix
 */
public function writeRichTextForCharts(XMLWriter $objWriter, $pRichText = null, $prefix = null)
       //size Font
        $objWriter->startElement($prefix . 'sz');
        $objWriter->writeAttribute('val', 10);
        $objWriter->endElement();

Por defecto, el tamaño de la letra de los títulos de los gráficos es de 18pt. Quiero que sean de 10pt.

solución

He conseguido solucionarlo. Para ello he tenido que modificar clases de la librería Phpspreadsheet.
En el código que añadí al formular la pregunta, hay que modificar la clase StringTable.php.

Adjunto el código correcto de dicha clase.

Classes/PhpSpreadsheet/Writer/Xlsx/StringTable.php

 /**
 * Write Rich Text.
 *
 * @param XMLWriter $objWriter XML Writer
 * @param RichText|string $pRichText text string or Rich text
 * @param string $prefix Optional Namespace prefix
 */
 public function writeRichTextForCharts(XMLWriter $objWriter, $pRichText = null, $prefix = null)
       //size Font
       $objWriter->writeAttribute('sz', $element->getFont()->getSize() * 100 );
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *