We have changed our pricing. Flexmonster Software License Agreement was also updated (list of changes)

Error al exportar el excel

Answered
Rubén asked on January 21, 2025

Buenas tardes;

Tenemos una licencia de la biblioteca Flexmonster, la cogimos para que hubiera una gran facilidad a la hora de integrarlo en la herramienta que tenemos para una empresa. Al exportar los archivos, me salen caracteres ilegibles como si hubiera un problema de codificación. Todos mis archivos están con el charset: utf 8 con lo cuál me deberían salir con los acentos y la ñ, pero no es así, he modificado el archivo mil veces y sigue saliendo igual. No sé dónde puede estar el problema con vuestra biblioteca, dejo mi código para ver que estoy haciendo mal.

 //Pivot Table
    function decodeHtmlEntities(str) {
        if (str && typeof str === "string") {
            var doc = new DOMParser().parseFromString(str, "text/html");
            return doc.documentElement.textContent;
        }
        return str;
    }

   
    {
        var reportDef = {
            dataSource: {
                filename: "/dashboard/data.php?dashboard=" + $('#dashboard').val(),
                params: {
                    dashboard: $('#dashboard').val()
                }
            }
        };
        if (report != null && report != "") {
            reportDef = report;
        }

        if (!$('#fK').length) {
            pivotLib = 'webdatarocks';
            pivot = new WebDataRocks({
                container: "#dashboardPivot",
                beforetoolbarcreated: customizeToolbar,
                toolbar: true,
                report: reportDef,
                global: {
                    localization: "/assets/libs/webdatarocks/lang/es.json",
                },
                reportcomplete: function () {
                    handleViewChange();
                },

            });
        }
        else {

            pivotLib = 'flexmonster';
            pivot = new Flexmonster({
                container: "#dashboardPivot",
                componentFolder: "/assets/libs/flexmonster/",
                beforetoolbarcreated: customizeToolbar,
                toolbar: true,
                report: reportDef,
                global: {
                    localization: "/assets/libs/flexmonster/lang/es.json",
                },
                reportcomplete: function () {
                    handleViewChange();
                },
                licenseKey: $('#fK').val(),
                beforeExport: function (params) {
                    params.data = params.data.map(row => row.map(cell => {
                        if (typeof cell === "string") {
                            // Paso 1: Decodificar las entidades HTML
                            cell = decodeHtmlEntities(cell);

                            // Paso 2: Normalizar a UTF-8 NFC (forma normal compuesta)
                            cell = cell.normalize("NFC");

                            // Paso 3: Reemplazar caracteres no imprimibles
                            cell = cell.replace(/[^\x20-\x7E]/g, ''); // Elimina caracteres no imprimibles
                        }
                        return cell;
                    }));
                    params.fileName = "ExportedFile.xlsx";  // Nombre del archivo exportado
               
                    toolbar: {
                        items: [
                            {
                                name: "export",
                                title: "Exportar",
                                icon: "export",
                                onClick: function () {
                                    // Exportar a Excel usando la función nativa de Flexmonster
                                    pivot.exportTo("xlsx"); // Se exporta directamente a Excel
                                }
                            }
                        ]
                    }
       

                }
            });

            reportDef = pivot.getReport();

      }

 
Gestiono las entidades HTML antes de exportar los datos, pero aún así siguen saliendo mal.
 
Espero vuestra respuesta de manera urgente.
 
Un saludo

1 answer

Public
Nadia Khodakivska Nadia Khodakivska Flexmonster January 22, 2025

Hello,

Thank you for reaching out to us.

Flexmonster displays the UTF-8 charset correctly in the exported files by default. To export the grid to Excel, you can use the following code:

pivot.exportTo("excel");

If you want to add a custom tab that exports the pivot to Excel, you can use the Toolbar customization:

let pivot = new Flexmonster({
// other configs
beforetoolbarcreated: customizeToolbar,
});

function exportExcel() {
pivot.exportTo("excel")
}

function customizeToolbar(toolbar) {
let tabs = toolbar.getTabs()
toolbar.getTabs = function () {
tabs.unshift({
id: "export",
title: "Exportar",
handler: exportExcel,
icon: this.icons.export_excel,
})
return tabs
}
}

This code will add a custom "Exportar" tab to the Toolbar that will export the report to Excel. Please check the following JSFiddle for illustration: https://jsfiddle.net/flexmonster/1ugnzLaw/.

Also, you are welcome to refer to the following guides for more details:

Please let us know if it works for you. Looking forward to hearing from you.

Kind regards,
Nadia

Please login or Register to Submit Answer