Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

(Zahlen)Daten aus Zelle extrahieren

(Zahlen)Daten aus Zelle extrahieren
27.03.2024 14:18:20
fcsp1988
Hallo,

ich werde leider nicht schlau mit allen angebotenen bzw. ergoogelten Lösungen.
Ich habe GeoDaten, jedoch sind die leider alle aneinandergereiht in einer einzigen Zelle, das sieht dann ungefähr so aus

{'lat': 52.238197, 'lng': 10.478262}, {'lat': 52.2364, 'lng': 10.481187}, {'lat': 52.238197, 'lng': 10.484111}

Natürlich kann ich die Daten in Spalten aufteilen und dann drehen sodass diese untereinander stehen, ABER
für den Import in mein Tool brauche ich die Datenpaare nebeneinander in getrennten Spalten, also
LAT LONG
52.238197 10.478262

irgendwie finde ich keinen vernünftigen Ansatz.
Ich hoffe ihr könnt mir weiterhelfen, vielen Dank!

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: (Zahlen)Daten aus Zelle extrahieren
27.03.2024 14:33:04
Onur
Poste bitte mal eine Musterdatei.
Bei deiner Excelversion wäre am besten eine VBA-Lösung.
AW: Javascript Dictionary?
27.03.2024 14:45:09
Fennek
Hallo,

wo kommen diese Werte her? Die Schreibweise erinnert an JAvascript.


mfg
AW: Javascript Dictionary?
28.03.2024 14:56:34
fcsp1988
Tja, das ist leider einfach nur ein Feld in einer Excel Datei...
AW: Javascript
27.03.2024 15:15:11
Fennek
Hallo,

ein kleiner javascript-Code bringt die Werte in eine Liste:

https://www.herber.de/bbs/user/168358.txt

Der Code steht am Ende. Nach löschen der Endung ".txt" reicht ein Doppelklick.

mfg
AW: (Zahlen)Daten aus Zelle extrahieren
27.03.2024 15:52:58
Zwenn
Das sieht aus, wie ein unvollständiges JSON. Kann es sein, dass Du nur einen Ausschnitt der Daten gepostet hast?
https://de.wikipedia.org/wiki/JavaScript_Object_Notation

JSONs kann man in VBA bequem mit dem JsonConverter von Tim Hall auseinandernehmen:
{} werden Dictionaries
[] werden in VBA Collections
https://github.com/VBA-tools/VBA-JSON
Anzeige
AW: Eventuell kannst...
28.03.2024 15:02:02
fcsp1988
Auch hier ein großes Dankeschön, mit der Lösung bin ich tatsächlich am weitesten gekommen bisher; jedoch scheitert es jetzt jedoch sobald ich die 2. Zeile einsetze mit anderen Daten. ich kann also das Feld oben links quasi nicht ersetzen bzw. austauschen mit anderen Daten.
Ich hätte nicht gedacht, dass das alles so kompliziert ist und ich frage mich, wer so eine Excel Datei verteilt...
Anzeige
AW: (Zahlen)Daten aus Zelle extrahieren
27.03.2024 16:00:14
Zwenn
Nochmal zum "unvollständig"

Deine Daten:
{'lat': 52.238197, 'lng': 10.478262}, {'lat': 52.2364, 'lng': 10.481187}, {'lat': 52.238197, 'lng': 10.484111} 


Für ein richtiges JSON fehlen da noch eckige Klammern drum herum:
[{'lat': 52.238197, 'lng': 10.478262}, {'lat': 52.2364, 'lng': 10.481187}, {'lat': 52.238197, 'lng': 10.484111}]


Du kannst beides mal hier reinwerfen und auf Process klicken. Erst Deine Daten, dann siehst Du die Fehlermeldungen zum Format. Dann nochmal mit eckigen Klammern drum herum. Dann bekommst Du ein besser lesbares Format:
https://jsonformatter.curiousconcept.com/
Anzeige
AW: (Zahlen)Daten aus Zelle extrahieren
28.03.2024 15:00:18
fcsp1988
Danke, jedoch bekomm ich ich dann die Datenpaare auch nur untereinander, ich brauche diese aber in 2 spalten (LAT/LONG) nebeneinander oder aber als *.csv
AW: (Zahlen)Daten aus Zelle extrahieren
28.03.2024 19:58:20
Zwenn
Der JSONFormatter zeigt eine JSON Datei nur in einer für Menschen lesbareren Form an. Es ist auf diese Weise Möglich, auch die Struktur von weitaus komplexeren Datenansammlungen zu verstehen. Der in meinem ersten Posting erwähnte JsonConverter hingegen ist dafür da, die Daten aus einem JSON rauszuholen. Dabei verschwinden alle Klammern und Kommas automatisch. Die Daten selbst kannst Du hinschreiben, wo Du willst.

Ein JSON ist ein Datenaustauschformat, genauso, wie CSV oder XML es sind. Alle drei genannten sind reine Textdateien. Sie haben "lediglich" einen unterschiedlichen Aufbau. Für JSON ist dieser Aufbau spezifiziert, also genormt. Deshalb funktioniert der JsonConverter mit jeder nicht korumpierten JSON Datei, weil er daraus in jedem Fall Dictionaries und Collections erstellen kann. Über diese Datenstruktur hast Du freien Zugriff auf die Daten und kannst sie, wie gesagt, genau da hinschreiben, wo Du sie benötigst.

Du hast angegeben kein VBA zu können. Das hatte ich nicht berücksichtigt, als ich den JsonConverter vorschlug. Aber Du hast meine Frage nach der Vollständigkeit des von Dir geposteten Daten Ausschnitts nicht beantwortet. Ist das nur ein Ausschnitt, eines größeren JSON?

Ich gehe davon aus, Du hast weitaus mehr Daten vorliegen, die Du in Excel weiterverarbeiten möchtest. Sind die alle in einen JSON oder hast Du mehrere davon, die abgearbeitet werden müssen? Wo liegen die Daten? Du hast hier im Thread irgendwo geschrieben, die sind einfach in der Excel Zelle. Wie kommen sie denn dort hinein? Sind mehrere Zellen untzereinander mit JSON gefüllt?

Es ist auch gut möglich, dass JSON mit Power Query direkt in Excel verarbeitet werden können. Dazu kann ich aber nix sagen, weil ich mich mit PQ nicht auskenne.

Wie auch immer die Lösung am Ende aussieht, Du hast ja mehrere brauchbare Vorschläge bekommen, wirklich helfen kann man Dir nur, wenn Du eine vollständige JSON Datei zur Verfügung stellst. Wenn die Daten nur in einer Excel Zelle stehen (was ich befremdlich fände, denn wie kommen sie dort hin?), dann lade die entsprechende Excel Datei hier hoch. Sonst haben wir keine Möglichkeit uns ein richtiges Bild zu machen.
Anzeige
AW: Zurüch zum Start: Enfernungen der Daten
28.03.2024 20:16:38
Fennek
Userbild
AW: (Zahlen)Daten aus Zelle extrahieren
31.03.2024 13:25:29
fcsp1988
https://www.herber.de/bbs/user/168417.xlsx

So sehen die Daten aus.
Ich habe in den Dateiinfos jetzt gesehen, dass es wohl mit openpyxl gemacht wurde; was mich allerdings auch nicht weiterhilft weil ich mich damit null auskenne.
Ich möchte einfach nur die Daten LAT / LONG aus dem jeweiligen Feld, nebeneinander aufgelistet um damit dann ein Polygon zu zeichnen
AW: (Zahlen)Daten aus Zelle extrahieren
01.04.2024 00:40:34
Zwenn
Hallo fcsp1988,

die von Dir zur Verfügung gestellte Datei enthält in der Tabelle Sheet1 alles, was ich mir gewünscht habe. Die Tabelle Sheet1 habe ich belassen wie sie war. Sie enthält 120 JSONs in 120 Zeilen. Soweit so gut. Blöderweise sind von diesen 120 leider 53 unvollständig und lassen sich nicht "auflösen". Du schreibst, die Daten kommen aus openpyxl. Gute Info! Das ist eine Bibliothek für die Programmiersprache Python, mit der Excel-Dateien bearbeitet werden können.

Leider hat die Person, die den Export der JSONs in in die vorliegende Excel-Datei vorgenommen hat, vergessen zu prüfen, ob ein JSON zu groß ist. In eine Zelle passen nämlich nur 32.767 Zeichen. Alles was darüber noch kam, wurde abgeschnitten. Ich habe in der Tabelle Unvollständige JSONs auf die genannten 53 JSONs gefiltert. Wenn Du die Möglichkeit hast, besorge Dir die JSONs noch einmal als 120 Text-Dateien. Die kann man genau so durchrattern, hat aber keine Begrenzung in der Größe.

Es verbleiben also 67 JSONs, die mit dem JsonConverter abgearbeitet werden können. Die Auflistung dazu befindet sich in der Tabelle Testdata, die ich im Mokro als Quell-Tabelle verwende. Es ist unterm Strich nur die um die korrupten JSONs gekürzte Tabelle Sheet1.

Die von Dir gewünschten Daten kommen für die 67 JSONs nun in die Tabelle Extracted Data. Allerdings sind die Daten nicht ganz so einfach strukturiert, wie Du Dir das vorgestellt hast glaube ich. Du schreibst, Du möchtest mit den Koordinaten Polygone zeichnen. Auch das ist eine gute Info. Denn jedes JSON enthält eine Figur, die Du zeichnen möchtest. Also ein shape. Eine Figur besteht aber aus zwei Teilen, nämlich der Hülle, der shell und Löchern, die sich darin befinden können, den holes. Das hat die Sache etwas komplizierter gemacht, als ich dachte, aber im Grunde muss man "nur" die richtigen Pfade, in der richtigen Reihenfolge, im JSON-Baum abklappern. Das macht das Makro.

Die englischen Begriffe shape, shell und holes, findest Du genau so in den JSONs. Deshalb habe ich sie hingeschrieben. Während eine shell auf jeden Fall vorhanden ist, gibt es in den 67 vollständigen JSONs zwischen 0 und 10 holes. Deshalb findest Du in den Spalten C, D und E eine entsprechende Aufgliederung, um welchen Datenpunkt aus Latitude (Spalte F) und Longitude (Spalte G) es sich pro Zeile in der Tabelle handelt. Zusammengenommen ergibt jede dieser 3er-Kombinationen eine eindeutige Bezeichnung, mittels der Du jeden Punkt einem shape, seiner shell und den zugehörigen holes zuordnen kannst. Keine Ahnung, wie und womit Du Deine Polygone zeichnen willst. Aber ohne diese Infos dürfte das schwierig werden glaube ich.

In Spalte A habe ich einfach die id aus der Quelltabelle und in Spalte B die search_id aus dem jeweiligen JSON übernommen. Keine Ahnung ob Du die Infos brauchst, frisst aber kein Brot, wie man so sagt. Es gibt allerdings nur vier verschiedene search_id, womit die vermutlich eh witzlos sind. Lösche die Spalte aber nicht, sonst stimmt die Zuordnung im Makro nicht mehr.

In der Datei findest Du neben Modul1 noch das Modul JsonConverter und die Klassendatei Dictionary. Beide stammen von Tim Hall, wobei ich Dictionary nur aus Bequemlichkeit eingebunden habe. Damit sollte das vorliegende Konstrukt allerdings auch auf einem Mac laufen, denn die JSONs liegen alle lokal vor. Aber ich habe keinen Mac und kann das deshalb nicht garantieren, falls es jemand ausprobieren möchte.

Im Modul1 befindet sich folgendes Makro:


Public Sub getShapesFromJSON()

Dim json As Dictionary
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim countShell As Long
Dim currShell As Long
Dim countHoles As Long
Dim currHoles As Long
Dim countHolePoints As Long
Dim currHolePoint As Long
Dim shapeNr As Long
Dim id As String
Dim searchId As String
Dim currRowSource As Long
Dim currRowDest As Long

Set wsSource = ThisWorkbook.Sheets("Testdata")
Set wsDest = ThisWorkbook.Sheets("Extracted Data")
currRowDest = 2

For currRowSource = 2 To wsSource.Cells(Rows.Count, 2).End(xlUp).Row
id = wsSource.Cells(currRowSource, 2)
Set json = JsonConverter.ParseJson(wsSource.Cells(currRowSource, 3))
searchId = json("results")(1)("search_id")
countShell = json("results")(1)("shapes")(1)("shell").Count
countHoles = json("results")(1)("shapes")(1)("holes").Count
shapeNr = shapeNr + 1

For currShell = 1 To countShell
wsDest.Cells(currRowDest, 1) = id
wsDest.Cells(currRowDest, 2) = searchId
wsDest.Cells(currRowDest, 3) = "shape_" & shapeNr
wsDest.Cells(currRowDest, 4) = "shell"
wsDest.Cells(currRowDest, 5) = currShell
wsDest.Cells(currRowDest, 6) = json("results")(1)("shapes")(1)("shell")(currShell)("lat")
wsDest.Cells(currRowDest, 7) = json("results")(1)("shapes")(1)("shell")(currShell)("lng")
currRowDest = currRowDest + 1
Next currShell

If countHoles > 0 Then
For currHoles = 1 To countHoles
countHolePoints = json("results")(1)("shapes")(1)("holes")(currHoles).Count

For currHolePoint = 1 To countHolePoints
wsDest.Cells(currRowDest, 1) = id
wsDest.Cells(currRowDest, 2) = searchId
wsDest.Cells(currRowDest, 3) = "shape_" & shapeNr
wsDest.Cells(currRowDest, 4) = "hole_" & currHoles
wsDest.Cells(currRowDest, 5) = currHolePoint
wsDest.Cells(currRowDest, 6) = json("results")(1)("shapes")(1)("holes")(currHoles)(currHolePoint)("lat")
wsDest.Cells(currRowDest, 7) = json("results")(1)("shapes")(1)("holes")(currHoles)(currHolePoint)("lng")
currRowDest = currRowDest + 1
Next currHolePoint
Next currHoles
End If
Next currRowSource
End Sub


Wenn ich es starte, braucht es auf meinem Rechner etwa 18 Sekunden, um die 67 JSONs zu verarbeiten. Das dauert also einen Moment, erstellt dafür aber immerhin auch eindeutig zugeordnete 24.415 Datenpunkte. Die Daten sind noch nicht enthalten, weil die maximale Uploadgröße im Forum 660 KB beträgt. Aber Du lässt halt einfach einmal das Makro laufen.

https://www.herber.de/bbs/user/168424.xlsm

Viele Grüße,

Zwenn
Anzeige
Habe die Daten mit...
01.04.2024 13:24:44
Case
Moin, :-)

... meiner Funktion mal aufbereitet. Erst habe ich wie Zwenn die "Defekten" weggefiltert. Du brauchst nur noch den Button klicken. ;-)
https://www.herber.de/bbs/user/168428.xlsb

Habe allerdings keine "alte" Excelversion mehr. Kann es also nicht testen. Bei mir läuft das sauber runter und er "spillt" die Formel. ;-)

Wenn du das allerdings oft machen musst (und kein VBA kannst), würde ich auf Power Query setzen. Folgende Links geben dir einen ersten Eindruck: ;-)
https://learn.microsoft.com/de-de/power-query/connectors/json
https://learn.microsoft.com/de-de/power-query/parse-json-xml

Da brauchst du kein VBA und kannst dir vieles "zusammenklicken". ;-)

Servus
Case
Anzeige
AW: (Zahlen)Daten aus Zelle extrahieren
27.03.2024 14:47:45
Onur
"nebeneinander in getrennten Spalten" bedeutet was ???
LAT LONG
52.238197 10.478262
52.238197 10.478262
52.238197 10.478262

oder das ?
LAT LONG LAT LONG LAT LONG
52.238197 10.478262 52.238197 10.478262 52.238197 10.478262
AW: (Zahlen)Daten aus Zelle extrahieren
28.03.2024 14:31:02
fcsp1988
LAT LONG
52.238197 10.478262
52.238197 10.478262
52.238197 10.478262

das solle es heißen
AW: (Zahlen)Daten aus Zelle extrahieren
27.03.2024 15:00:10
Fennek
Object { lat: 52.240894, lng: 10.465099 }
debugger eval code:1:3725
Object { lat: 52.238197, lng: 10.469487 }
debugger eval code:1:3725
Object { lat: 52.238197, lng: 10.478262 }
debugger eval code:1:3725
Object { lat: 52.2364, lng: 10.481187 }
debugger eval code:1:3725
Object { lat: 52.238197, lng: 10.484111 }
debugger eval code:1:3725
Object { lat: 52.2364, lng: 10.487036 }
debugger eval code:1:3725
Object { lat: 52.2364, lng: 10.489961 }
debugger eval code:1:3725
Object { lat: 52.234604, lng: 10.492886 }
debugger eval code:1:3725
Object { lat: 52.234604, lng: 10.4958105 }
debugger eval code:1:3725
Object { lat: 52.233704, lng: 10.497273 }
debugger eval code:1:3725
Object { lat: 52.231907, lng: 10.497273 }
debugger eval code:1:3725
Object { lat: 52.23011, lng: 10.494349 }
debugger eval code:1:3725
Object { lat: 52.226517, lng: 10.494349 }
debugger eval code:1:3725
Object { lat: 52.22472, lng: 10.497273 }
debugger eval code:1:3725
Object { lat: 52.21753, lng: 10.497273 }
debugger eval code:1:3725
Object { lat: 52.21663, lng: 10.498735 }
debugger eval code:1:3725
Object { lat: 52.21663, lng: 10.510435 }
debugger eval code:1:3725
Object { lat: 52.21753, lng: 10.511897 }
debugger eval code:1:3725
Object { lat: 52.221123, lng: 10.511897 }
debugger eval code:1:3725
Object { lat: 52.222248, lng: 10.510435 }
debugger eval code:1:3725
Object { lat: 52.223595, lng: 10.510435 }
debugger eval code:1:3725
Object { lat: 52.22472, lng: 10.511897 }
debugger eval code:1:3725
Object { lat: 52.228313, lng: 10.511897 }
debugger eval code:1:3725
Object { lat: 52.23011, lng: 10.514822 }
debugger eval code:1:3725
Object { lat: 52.231907, lng: 10.514822 }
debugger eval code:1:3725
Object { lat: 52.233704, lng: 10.515188 }
debugger eval code:1:3725
Object { lat: 52.2373, lng: 10.514822 }
debugger eval code:1:3725
Object { lat: 52.239098, lng: 10.511897 }
debugger eval code:1:3725
Object { lat: 52.240894, lng: 10.511897 }
debugger eval code:1:3725
Object { lat: 52.24269, lng: 10.514822 }
debugger eval code:1:3725
Object { lat: 52.24629, lng: 10.514822 }
debugger eval code:1:3725
Object { lat: 52.247185, lng: 10.516285 }
debugger eval code:1:3725
Object { lat: 52.245388, lng: 10.51921 }
debugger eval code:1:3725
Object { lat: 52.24629, lng: 10.521037 }
debugger eval code:1:3725
Object { lat: 52.24629, lng: 10.5232315 }
debugger eval code:1:3725
Object { lat: 52.245388, lng: 10.525059 }
debugger eval code:1:3725
Object { lat: 52.24629, lng: 10.526522 }
debugger eval code:1:3725
Object { lat: 52.248085, lng: 10.523597 }
debugger eval code:1:3725
Object { lat: 52.24988, lng: 10.523597 }
debugger eval code:1:3725
Object { lat: 52.25168, lng: 10.520672 }
debugger eval code:1:3725
Object { lat: 52.25887, lng: 10.520672 }
debugger eval code:1:3725
Object { lat: 52.266956, lng: 10.50751 }
debugger eval code:1:3725
Object { lat: 52.266956, lng: 10.504585 }
debugger eval code:1:3725
Object { lat: 52.267857, lng: 10.503122 }
debugger eval code:1:3725
Object { lat: 52.269653, lng: 10.503122 }
debugger eval code:1:3725
Object { lat: 52.27145, lng: 10.506047 }
debugger eval code:1:3725
Object { lat: 52.27235, lng: 10.504585 }
debugger eval code:1:3725
Object { lat: 52.27235, lng: 10.50166 }
debugger eval code:1:3725
Object { lat: 52.273247, lng: 10.500198 }
debugger eval code:1:3725
Object { lat: 52.274147, lng: 10.50166 }
debugger eval code:1:3725
Object { lat: 52.274147, lng: 10.504585 }
debugger eval code:1:3725
Object { lat: 52.275047, lng: 10.506047 }
debugger eval code:1:3725
Object { lat: 52.276844, lng: 10.506047 }
debugger eval code:1:3725
undefined

Anzeige
AW: (Zahlen)Daten aus Zelle extrahieren
27.03.2024 15:14:20
daniel
Hi
für auf die Schnelle und von Hand:
1. Anfang und Ende von hand Entfernen, so dass nur die Koordinaten übrig bleiben.
2. ersetzte "},{" durch "};{" damit bekommst du zwischen den Koordinatenpaaren ein anderes Trennzeichen also zwischen den einzelnen Koordinaten
3. TEXT IN SPALTEN mit Semikolon als Trennzeichen
4. Zeile kopieren und mit der Option TRANSPONIEREN an anderer Stelle einfügen
5. mit der so entstandenen Spalte nochmal TEXT IN SPALTEN ausführen, jetzt mit Komma als Trennzeichen
6. die weitere Bereinugung solltest du dann selber hinbekommen.

Gruß Daniel
Anzeige
AW: (Zahlen)Daten aus Zelle extrahieren
28.03.2024 14:44:59
fcsp1988
Danke, dann hab ich jedoch alles untereinander aufgelistet - oder ich habs falsch gemacht :(
AW: (Zahlen)Daten aus Zelle extrahieren
28.03.2024 16:04:46
daniel
du musst das Komma, das zwischen long und lat steht, durch ein anderes Zeichen ersetzen, damit diese beiden Werte beim ersten Trennen noch zusammenbleiben.
hierzu nimmst du beim ERSEETZEN die umliegenden Zeichen mit, dh die beiden Klammern und ersetzt }, { durch }; {
es kann sein, dass ich hier das Leerzeichen nach dem Komma übersehen habe und wenn du das dann halt genauso nach machst, funtioniert es nicht.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige