JavaScript - Convertir excel (.xls) a json

 
Vista:
Imágen de perfil de Jose maria
Val: 71
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Convertir excel (.xls) a json

Publicado por Jose maria (18 intervenciones) el 29/06/2014 16:33:58
Hola a todos.

En el mar de dudas de preguntar en el foro de excel (lenguaje de origen), php (me temo que el lenguaje a utilizar) y javascript (lenguaje a utilizar como destino) opto por plantear el tema aquí.

Parto de un excel (.xls) cuyos datos quiero trasladarlos mediante .json a javascript para trabajarlos en la web.

He logrado convertidores en línea que pueden hacer el trabajo como Mr. Data Converter, que lo hace basado puramente en javascript, así como leerlos mediante PHP con http://sourceforge.net/projects/phpexcelreader/

Este último es muy ágil pero, si bien logro imprimirlo como quiero, no logro implementar json_encode para que javascript lo reconozca.

Dado que la actualización ha de ser muy frecuente (diaria) quiero realizarlo mediante código automático.

¿Alguien tiene experiencia en la lectura de archivos mediante json?.

¿Alguna pista?

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Convertir excel (.xls) a json

Publicado por xve (2100 intervenciones) el 30/06/2014 07:34:29
Hola Jose Maria, hace como tres o cuatro años, yo lo estuve buscando, pero no encontré la manera... Si encontré como hacerlo desde un CSV, que supongo que habrás encontrado varios ejemplos del mismo, pero del formato XLS no encontré manera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose maria
Val: 71
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Convertir excel (.xls) a json

Publicado por Jose maria (18 intervenciones) el 30/06/2014 11:29:11
Gracias xve:

Sí, hay una gran diferencia de CSV a XLS. Este último es prácticamente texto plano y es más fácil de manejar. Y las librería que encontraba eran extensas para CSV, XLS, XML, MYSQL, JSON ... en programación de ida y de vuelta. Y nada sencillo de implementar (algo así como dos días tentando a las fieras).

Al final (a altas horas) lo conseguí, más con imaginación que con soluciones dogmáticas.

Y lo explico (sobre códigos PHP):

Con PHP-ExcelReader podía acceder a las hojas, columnas y filas, recorriéndolas con un for.
Al terminar la lectura, dándole el formato propio de JSON, lo leía perfectamente con la estructura del JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
$arr = "[";
for ($i = 5; $i <= $data->sheets[0]['numRows']; $i++) {
  $arr .= "{";
	$arr .= "\"Provincia\":\"".$data->sheets[0]['cells'][$i][1]."\",";
	$arr .= "\"Localidad\":\"".$data->sheets[0]['cells'][$i][4]."\",";
	$arr .= "\"Direccion\":\"".$data->sheets[0]['cells'][$i][6]."\",";
        ...
    if ($i == $data->sheets[0]['numRows']) {
	  $arr .= "}";
	} else { $arr .= "},"; }
}
$arr .= "]";
print_r($arr);
pero en el javascript $.getJSON('ruta/archivo.php', function (data) no lo reconocía.

Si tomaba la estructura propia de json_encode()
1
2
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
al estar el for de por medio me daba "null"

Así que había que tirar de ingenio. La solución:
1
2
3
4
5
6
7
8
9
10
...
echo "[";
for ($i = 5; $i <= $data->sheets[0]['numRows']; $i++) {
	${'array'.$i} = array("Provincia" => $data->sheets[0]['cells'][$i][1],"Localidad" => $data->sheets[0]['cells'][$i][4],"Direccion" => $data->sheets[0]['cells'][$i][6], ...;
    echo json_encode(${'array'.$i});
    if ($i == $data->sheets[0]['numRows']) {
	  echo "";
	} else { echo ","; }
}
echo "]";
Y lo explico:
- Los echo inicial y final son para enmarcar el JSON;
- Con el for creo un array diferente por línea y los transfiero uno a uno a json mediante json_encode(${'array'.$i})
- Mediante el if dentro del for, los voy concatenando con la coma [,] correspondiente, excepto el último, que arrojaría error en su lectura.

Y listo: ya en javascript los trabajo a mi antojo
1
2
3
$.getJSON('php/ruta/archivo.php', function (data) {
...
}

Gracias igualmente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Convertir excel (.xls) a json

Publicado por xve (2100 intervenciones) el 30/06/2014 16:31:18
Excelente Jose Maria!!! muy bueno!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de txema
Val: 71
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

Convertir excel (.xls) a json

Publicado por txema (18 intervenciones) el 01/07/2014 16:53:20
Quería terminar con algunos inconvenientes que se pueden presentar.

La verdad es que me ha costado tanto que creo que merece la pena presentarlo a terceros.

Un primer inconveniente es la codificación en UTF8. Algunos campos pueden aparecer con valor "null" por culpa de acentos, eñes, etc. así que consideren, tag a tag la sentencia utf8_encode(). Sobre mi ejemplo:
1
array("Provincia" => utf8_encode($data->sheets[0]['cells'][$i][1]),"Localidad" => utf8_encode($data->sheets[0]['cells'][$i][4]),"Direccion" => utf8_encode($data->sheets[0]['cells'][$i][6]));

Una segunda sorpresa es que, funcionando en local (XAMP) y probado en dos hostings, en uno funcionaba y en otro no. Supondo que es por la versión de PHP y/o JSON que acepta. La solución es que pasen como cabecera, antes del JSON
1
header('Content-type: application/json; charset=iso-8859-1');
Esta última parte no la veo documentada en las páginas web pero es súmamente útil.

(Así que teóricamente JSON corresponde a texto plano pero en la práctica no es tan así).

Saludos

P.D.: Con tanto Jose María en la red, aunque la imagen puede ser la diferencia, léase mi nombre familiar: txema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir excel (.xls) a json

Publicado por DougNeiro (1 intervención) el 27/10/2014 18:10:55
Hola como estas,

tambíen he invertido mucho tiempo buscando una solución a esto sin embargo si estas dispuesto a no usar excel sino hojas de calculo de google esto te puede servir

http://www.oloblogger.com/2012/04/google-docs-como-base-de-datos-preparar.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Convertir excel (.xls) a json

Publicado por Juan (4 intervenciones) el 20/07/2023 09:37:30
Consulta, también estoy tratando de conocer la vinculación de JSON con JavaScript. Después de varios años encontraron la solución al tema?

Particularmente recién me estoy insertando en aprender JavaScript. Creo que seria interesante información ojala completa, donde convertir registros de un archivo de Excel a JSON, estos mostrarlo en un DataTable (también puede ser en vez de DataTable que se arme una tabla de registros con HTML)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar