Saltar al contenido

Datatables / TableTools: formatee los datos como texto al exportarlos a Excel

Solución:

Probé la primera opción dada por Aureltime pero encontré un pequeño efecto secundario. Si la columna solo contiene números y usa la función de renderizado, la opción de clasificación no funciona. Con suerte, a partir de la versión 1.10.12 de tablas de datos hay una nueva opción para personalizar los datos antes de crear el archivo de Excel.

En esta función de personalización agregué el / u002C y funciona perfecto, incluso la clasificación de números.

        "buttons": [{
            extend: 'excel',
            exportOptions: {
                orthogonal: 'sort'
            },
            customizeData: function ( data ) {
                for (var i=0; i<data.body.length; i++){
                    for (var j=0; j<data.body[i].length; j++ ){
                        data.body[i][j] = 'u200C' + data.body[i][j];
                    }
                }
            }               
            }],

Tengo la solución a este problema.

Se me rompió la cabeza mucho tiempo … Así que la explicación está debajo de esto:

  1. La corrección funciona bien en DatatableJS versión 1.10.11 (para la opción de exportación HTML Excel)
  2. Abra datatables.js y busque esto: “DataTable.ext.buttons.excelHtml5 = {“
  3. Busca en las siguientes líneas hasta tomar este código y comentarlo:

             cells.push( typeof row[i] === 'number' || (row[i].match && $.trim(row[i]).match(/^-?d+(.d+)?$/) && row[i].charAt(0) !== '0') ?
                '<c t="n"><v>'+row[i]+'</v></c>' :
                '<c t="inlineStr"><is><t>'+(
                    ! row[i].replace ?
                        row[i] :
                        row[i]
                            .replace(/&(?!amp;)/g, '&amp;')
                            .replace(/</g, '&lt;')
                            .replace(/>/g, '&gt;')
                            .replace(/[x00-x09x0Bx0Cx0E-x1Fx7F-x9F]/g, ''))+ // remove control characters
                '</t></is></c>'                                                      // they are not valid in XML
            );
    
  4. Pon este nuevo código:

                cells.push( '<c t="inlineStr"><is><t>'+(
                            ! row[i].replace ?
                                row[i] :
                                row[i]
                                    .replace(/&(?!amp;)/g, '&amp;')
                                    .replace(/</g, '&lt;')
                                    .replace(/>/g, '&gt;')
                                    .replace(/[x00-x09x0Bx0Cx0E-x1Fx7F-x9F]/g, ''))+ // remove control characters
                        '</t></is></c>'                                                      // they are not valid in XML
                    );
    
  5. Guarde su datatables.js

  6. ¡Disfrute de sus sagradas células de texto para siempre!

Esta solución ayuda a mantener los formatos de número, fecha y decimal.

Cambié el código para forzar a escribir en formato de texto todos los valores del HTML al XLSX.

Si alguien tiene una pregunta sobre esta solución, intentaré responder a todas esas preguntas.

Gracias a todos.

TableTools no crea una verdadero excel archivo, crea un csv archivo en su lugar. Aquellos contienen solo datos sin formato, sin formato. Aunque los ceros a la izquierda están allí, Excel generalmente no los mostrará. Tienes varias opciones aquí:

  • cambiar el formato desde dentro de Excel
  • abre el csv archivo desde el cuadro de diálogo abierto de Excel, desde el cual debería poder marcar columnas como texto (es posible que deba cambiar el tipo de archivo a txt)
  • agregue comillas alrededor de los datos
  • crear un verdadero archivo de Excel a través de alguna biblioteca externa
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *