JavaScript - Convertir excel (.xls) a json

   
Vista:
Imágen de perfil de Jose maria

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

Convertir excel (.xls) a json

Publicado por xve (1594 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

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

Convertir excel (.xls) a json

Publicado por xve (1594 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

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