Excel a varios objetos JSON
-
26-10-2019 - |
Pregunta
Tengo esta mesa de Excel:
country year 1 2 3 4 Netherlands 1970 3603 4330 5080 5820 Netherlands 1971 3436 4165 4929 5693 Netherlands 1972 3384 4122 4899 5683 Sweden 1970 1479 1963 2520 3132 Sweden 1971 1497 1985 2547 3163 Sweden 1972 1419 1894 2445 3055
Me gustaría experimentar con dos formatos JSON. O:
data = [
Netherlands : {
1970 : [3603, 4330, 5080, 5820],
1971 : [...],
},
Sweden : {
1970 : [...]
},
]
O usando los encabezados 1,2,3,4 como valores X:
data = [
Netherlands : {
1970 : [{x: 1, y: 3603}, {x: 2, y: 4330}, {x: 3, y: 5080}, {x: 4, y: 5820}],
1971 : [...],
},
Sweden : {
1970 : [...]
},
]
¿Cómo llego fácilmente de Excel a mis formatos JSON preferidos?
Sugiera métodos específicos para esta transformación, así como herramientas genéricas de conversión de datos como el excelente MR Converter de datos y Google Refine.
¡Gracias!
Solución
Puede descargar un conjunto de clases que convierten los datos de Excel a JSON desde aquí. http://ramblings.mcpher.com/home/excelquirks/downloadlist. El proyecto que desea es 'clases de manipulación de datos'.
Usando estas clases, este código
Option Explicit
Public Sub mainExample()
Dim dSet As cDataSet
Set dSet = New cDataSet
With dSet
.populateData Range("data!$a$1"), , , , , , True
If .Where Is Nothing Then
MsgBox ("No data to process")
Else
MsgBox .jSonObject
End If
End With
End Sub
es todo lo que se necesita para producir esto a partir de sus datos.
{ "data": {
"country": "Sweden",
"year": "1972",
"1": "1419",
"2": "1894",
"3": "2445",
"4": "3055"
}
}
Puede hacer cosas más complejas o adaptar la salida, después de leer este artículo sobre cómo funciona. http://ramblings.mcpher.com/home/excelquirks/recursionlink/hiding-data-in-excel-objects
bruce
Otros consejos
A veces solo uso la concatanación de cadena simple para generar declaraciones SQL, supongo que podrías hacer algo como:
=A2 + ": { " + A3 + ", " + A4 + ", " + A5 + ", " + A... +"}"
Que envolverlo dentro data = []
, o use una fórmula elegante ... para la segunda parte debe bloquear la fila con $ a1