Forum


Replies: 11   Views: 752
Eliminar ceros en gráfica
Topic closed:
Please note this is an old forum thread. Information in this post may be out-to-date and/or erroneous.
Every phpdocx version includes new features and improvements. Previously unsupported features may have been added to newer releases, or past issues may have been corrected.
We encourage you to download the current phpdocx version and check the Documentation available.

Posted by admin  · 21-10-2022 - 12:36

Hola,

Es posible que sea necesario utilizar la opción theme de addChart disponible en licencias Premium.

¿Esa gráfica es generada mediante el método addChart o es de una plantilla existente generada con MS Word u otro editor de DOCX que incluye la gráfica?

Si es generada mediante el método addChart, por favor responde con el ejemplo más sencillo posible utilizando solo phpdocx, por ejemplo que genere una gráfica con tres valores.

Si la gráfica es generada con MS Word u otro editor de DOCX en una plantilla existente, no hay método en phpdocx disponible para modificar esos valores/propiedades de una gráfica existente.

Saludos.

Posted by rmartinez  · 25-10-2022 - 15:14

El gráfico lo genero con el método addChart. Algo tal que así:

$data = array(
        'legend' => array('Legend 4', 'Legend 3', 'Legend 2', 'Legend 1'),
        'data' => array(
                array(
                        'name' => 'data 1',
                        'values' => array(10, 0, 0, 0),
                ),
                array(
                        'name' => 'data 2',
                        'values' => array(0, 60, 0, 0),
                ),
                array(
                        'name' => 'data 3',
                        'values' => array(0, 0, 7, 0),
                ),
                array(
                        'name' => 'data 3',
                        'values' => array(0, 0, 0, 22),
                ),
        ),
);

$paramsChart = array(
        'sizeX' => 15,
        'sizeY' => 10,
        'hgrid' => 1,
        'vgrid' => 0,
        'minorUnit' => 0,
        'showValue' => 1,
        'chartAlign' => 'center',
        'legendPos' => 'b',
        'stylesTitle' => [
                'fontSize' => 1100,
                'bold' => true,
        ],
        'data' => $data,
        'type' => 'barChart',
);

$docx->addChart($paramsChart);

Tengo la versión 13 Advanced.

Gracias.

Saludos.

Posted by admin  · 25-10-2022 - 15:45

Hola,

Gracias por enviar un ejemplo de uso.

Los valores mostrados son los especificados para la gráfica. Ocultarlos individualmente requiere el uso de una licencia Premium para acceder al conjunto de estilos extendidos (opción theme).

Mostrar los valores 0 al habilitar la opción showValue es lo predeterminado por MS Word. Si no quieres mostrar un valor en la gráfica (aunque el espacio ocupado permanece), la opción es utilizar un string vacío ('') en lugar de un asignar un valor de 0. Por ejemplo:

$data = array(
    'legend' => array('Legend 4', 'Legend 3', 'Legend 2', 'Legend 1'),
    'data' => array(
        array(
            'name' => 'data 1',
            'values' => array(10, '', '', ''),
        ),
        array(
            'name' => 'data 2',
            'values' => array('', 60, '', ''),
        ),
        array(
            'name' => 'data 3',
            'values' => array('', '', 7, ''),
        ),
        array(
            'name' => 'data 3',
            'values' => array('', '', '', 22),
        ),
    ),
);

$paramsChart = array(
    'sizeX' => 15,
    'sizeY' => 10,
    'hgrid' => 1,
    'vgrid' => 0,
    'minorUnit' => 0,
    'showValue' => 1,
    'chartAlign' => 'center',
    'legendPos' => 'b',
    'stylesTitle' => [
        'fontSize' => 1100,
        'bold' => true,
    ],
    'data' => $data,
    'type' => 'barChart',
);

$docx->addChart($paramsChart);

Saludos.

Posted by rmartinez  · 25-10-2022 - 15:51

Poner tu código, con las cadenas vacías, no funciona, me siguen apareciendo los ceros. ¿A tí no?

Posted by admin  · 25-10-2022 - 16:01

Hola,

Todos los códigos se comprueban antes de enviarlos. Al ejecutar el código anterior y abrir el DOCX con LibreOffice 7, MS Word 2019, MS Word 2016, MS Word 2013, MS Word 2010 y MS Word 2007, los valores 0 no se muestran. Hemos hecho las comprobaciones con PHP 5.6, PHP 7.3, PHP 7.4 y PHP 8; en todos los casos la salida es correcta y la visualización de los datos en la tabla de la gráfica insertados como '' se omiten (la barra ocupa su espacio correspondiente pero al tener valor vacío no se muestra la barra y su valor numérico no aparece), tampoco se muestra el valor 0. Este comportamiento es igual al crear una gráfica con MS Word.

Aquí puedes ver una captura del DOCX al ejecutar el código anterior con phpdocx Advanced 13 namespaces:

https://freeimage.host/i/Dh6GZx

Te recomendamos ejecutar el código de manera individual y comprobar que el archivo abierto sea el generado por el script y no una copia cacheada u otro archivo.

Ten en cuenta que tiene que ser un valor vacío (''), no un espacio en blanco o similar.

Saludos.

Posted by rmartinez  · 26-10-2022 - 11:05

Algo extraño. Si la gráfica la añado por el método addChart en un docx generado con el método CreateDocxFromTemplate, me aparecen ceros y colores grisáceos:

https://drive.google.com/file/d/1S5IDRYXPVRF_2FN9UIp_Y85es_V3TQhS/view?usp=sharing

Sin embargo, si añado la gráfica, en un docx generado con el método CreateDocx, me sale igual que a vosotros.

Entiendo que el documento plantilla tendrá algún tipo de configuración por defecto que tenga que cambiar. ¿Podríais decirme el qué y dónde?

Gracias.

Saludos.

Posted by admin  · 26-10-2022 - 11:20

Hola,

Lo sentimos pero no sabemos qué configuración interna puede estar definida en la plantilla que estáis utilizando que está añadiendo esos valores predeterminados para las gráficas; quizás algún tema o esquema por defecto definido al crear la plantilla.

El método addChart (https://www.phpdocx.com/api-documentation/word-content/add-chart-Word-document-with-PHP) incluye la opción color para definir el color scheme utilizado por la gráfica. En el paquete hay varios ejemplos incluidos utilizando esta opción.

Saludos.

Posted by rmartinez  · 27-10-2022 - 06:20

Para simplificar, he creado un word desde cero, sin nada, para utilizarlo con el método CreateDocxFromTemplate y la gráfica me aparece con los colores de vuestro ejemplo pero, el resto de características, como en el dibujo de la gráfica grisácea que os facilité (con los ceros, y las unidades intermedias)

https://drive.google.com/file/d/1wbaOiOOO79lB8neymVmhFQc6FbpgzKhH/view?usp=sharing

Mi versión de word es: Microsoft® Word 2016 MSO (versión 2209 compilación 16.0.15629.20196) de 32 bits

No creo que sea algo que me ocurra solo a mi. ¿Podríais hacer una prueba rápida?

Gracias.

Saludos.

Posted by admin  · 27-10-2022 - 08:10

Hola,

Efectivamente, como comentas, MS Word cambia cómo se comporta por defecto para ocultar o mostrar los valores 0 según la versión de MS Word definida en el archivo DOCX. Por ejemplo, si el DOCX está definido como versión 12.0000 los valores 0 se ocultan automáticamente, pero si está definido como 16.0000 se muestran automáticamente. La plantilla base incluida en phpdocx es de tipo 12.0000.

No hay ninguna opción para cambiar este comportamiento por defecto de ocultar/mostrar los 0 de las gráficas de MS Word según la versión definida (etiqueta AppVersion) salvo especificar la versión que se quiere utilizar. Ni siquiera habilitando las opciones de compatibilidad con versiones anteriores según comprobamos. Estos son cambios de MS Word que hacen y rompen de cierta manera la compatibilidad con versiones anteriores.

phpdocx no tiene una opción para personalizar el valor de AppVersion, pero si haces dos sencillos cambios en dos archivos puedes incluirlo:

Archivo CreateDocx.php: en el método addProperties, en lugar de:

if (!empty($values['Manager']) || !empty($values['Company'])) {

añade:

if (!empty($values['Manager']) || !empty($values['Company']) || !empty($values['AppVersion'])) {

Archivo CreateProperties.php: en el método createPropertiesApp, en lugar de:

$appProperties = array('Manager', 'Company');

añade:

$appProperties = array('Manager', 'Company', 'AppVersion');

Con estos cambios, puedes personalizar el valor de AppVersion ejecutando addProperties. Por ejemplo:

$data = array(
    'legend' => array('Legend 4', 'Legend 3', 'Legend 2', 'Legend 1'),
    'data' => array(
        array(
            'name' => 'data 1',
            'values' => array(10, '', '', ''),
        ),
        array(
            'name' => 'data 2',
            'values' => array('', 60, '', ''),
        ),
        array(
            'name' => 'data 3',
            'values' => array('', '', 7, ''),
        ),
        array(
            'name' => 'data 3',
            'values' => array('', '', '', 22),
        ),
    ),
);

$paramsChart = array(
    'sizeX' => 15,
    'sizeY' => 10,
    'hgrid' => 1,
    'vgrid' => 0,
    'minorUnit' => 0,
    'showValue' => 1,
    'chartAlign' => 'center',
    'legendPos' => 'b',
    'stylesTitle' => [
        'fontSize' => 1100,
        'bold' => true,
    ],
    'data' => $data,
    'type' => 'barChart',
);

$docx->addChart($paramsChart);

$docx->addProperties(array('AppVersion' => '12.0000'));

 

El método recomendado sería utilizar la opción theme disponible en las licencias Premium, aunque una nueva sería necesario para borrar la visualización de valores específicos.

Saludos.

Posted by rmartinez  · 27-10-2022 - 10:17

Funcionando perfectamente, muchas gracias.

Saludos.

Posted by peteruser1  · 29-10-2022 - 16:36

Deleted by admin · 30-10-2022 - 08:19