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:
- La corrección funciona bien en DatatableJS versión 1.10.11 (para la opción de exportación HTML Excel)
- Abra datatables.js y busque esto: “DataTable.ext.buttons.excelHtml5 = {“
-
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, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/[x00-x09x0Bx0Cx0E-x1Fx7F-x9F]/g, ''))+ // remove control characters '</t></is></c>' // they are not valid in XML );
-
Pon este nuevo código:
cells.push( '<c t="inlineStr"><is><t>'+( ! row[i].replace ? row[i] : row[i] .replace(/&(?!amp;)/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/[x00-x09x0Bx0Cx0E-x1Fx7F-x9F]/g, ''))+ // remove control characters '</t></is></c>' // they are not valid in XML );
-
Guarde su datatables.js
- ¡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 atxt
) - agregue comillas alrededor de los datos
- crear un verdadero archivo de Excel a través de alguna biblioteca externa