maximale Zeichenanzahl pro Zelle umgehen

Moderator: ModerationP

maximale Zeichenanzahl pro Zelle umgehen

Beitragvon michu1 » 05. Okt 2017, 15:36

Hallo zusammen,

Ich möchte eine Datenabfrage (API) in Excel einbinden und anschließend diverse Werte daraus automatisch via Formeln auslesen lassen. Das klappt bislang auch nach einer langen Experimentierphase endlich gut, alle gewünschten Werte konnten ausgelesen werden. Nun habe ich eine sehr lange Datenabfrage importiert, bei "Datei öffnen als" wähle ich stets Textdatei. Damit wird der gesamte Inhalt, der an sich auch als JSON abrufbar ist, in einer Zelle dargestellt.

Nun zu meinem Problem: Bei der betroffenen Datenabfrage wird nicht der gesamte Inhalt ausgegeben, da sie die von Excel maximal zulässige Zeichenanzahl von 32.767 pro Zelle überschreitet (Quelle).

Wie schaffe ich es, in Excel den gesamten Inhalt dieser langen Datenabfrage anzuzeigen? Am einfachsten wäre es, wenn die Zeichenanzahl pro Zelle veränderbar wäre. Gibt es da eine Möglichkeit?
Alternativ fällt mir nur ein, die Abfrage zu Teilen, allerdings habe ich das bislang nicht geschafft.
Wenn bei der Dateiabfrage unter "Datei öffnen als" statt "Textdatei" die Option "CSV-Datei" ausgewählt wird, gibt Excel die einzelnen Werte in jeweils einer Zelle wieder. Das ergibt dann aber mehrere 10.000 (oder 100.000?) Zellen in einer Zeile, was eine Auswertung für mich unmöglich macht.

Ich bedanke mich bereits vorab für jegliche Lösungsvorschläge oder Ideen :)
michu1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Jul 2017, 23:25

Re: maximale Zeichenanzahl pro Zelle umgehen

Beitragvon Gast » 05. Okt 2017, 16:11

Hm,
vielleicht bin da so altmodisch, aber wenn du doch als Quelle ein JSON-Format hast und Excel keinen wirklichen Support dafür beitet...
Wiso nutzt du nicht einen der zahllosen JSON-nach-Excel-Konverter (z.B. http://www.convertcsv.com/json-to-csv.htm oder irgendeinen anderen) und lässt dir eine xls(x)-Datei zurückgeben?
Oder ruft doch mal laut hier im Forum "Kennt hier jemand PowerQuery?", dann kommen gleich Kohorten hilfreicher Spezialisten um die Ecke und machen das damit.

jedenfalls wäre das Aufblasen einer Excel-Zelle zur Größe von 2 GByte oder 20 Hektoliter der Plan, den ich mir für spätere zeiten aufheben würde.

Grüße
Biber
Gast
 

Warum ...

Beitragvon ehem. lupo1 » 05. Okt 2017, 16:12

... lässt Du das Importieren nicht einfach sein, und wertest die Datei nicht statt dessen einfach mit den Dateioperationen (Open, Seek, Get, Close) von VBA aus?
ehem. lupo1
 

Re: maximale Zeichenanzahl pro Zelle umgehen

Beitragvon michu1 » 05. Okt 2017, 16:53

Gast hat geschrieben:Hm,
vielleicht bin da so altmodisch, aber wenn du doch als Quelle ein JSON-Format hast und Excel keinen wirklichen Support dafür beitet...
Wiso nutzt du nicht einen der zahllosen JSON-nach-Excel-Konverter (z.B. http://www.convertcsv.com/json-to-csv.htm oder irgendeinen anderen) und lässt dir eine xls(x)-Datei zurückgeben?

Für eine einmalige Abfrage wäre das natürlich am einfachsten, ich benötige die Daten allerdings ständig aktuell. Das mache ich über "Alle aktualisieren" bzw ggf. durch das Aktualisieren einzelner Abfragen.

Gast hat geschrieben:Oder ruft doch mal laut hier im Forum "Kennt hier jemand PowerQuery?", dann kommen gleich Kohorten hilfreicher Spezialisten um die Ecke und machen das damit.

jedenfalls wäre das Aufblasen einer Excel-Zelle zur Größe von 2 GByte oder 20 Hektoliter der Plan, den ich mir für spätere zeiten aufheben würde.

Grüße
Biber

Mit PowerQuery habe ich mich noch nicht beschäftigt, bzw dachte ich bislang, dass die Funktion mit dem von mir verwendeten "Abfrage-Editor" ident ist. Kann man damit aktualisierbare Datenabfragen erstellen? Sofern das geht wäre ich dir für ein paar Tipps dankbar, wie das in etwa funktioniert.

ehem. lupo1 hat geschrieben:... lässt Du das Importieren nicht einfach sein, und wertest die Datei nicht statt dessen einfach mit den Dateioperationen (Open, Seek, Get, Close) von VBA aus?

Weil ich mit VBA schon immer auf Kriegsfuß stehe :(
Ich kann damit absolut nicht umgehen, und wollte daher die Lösung ohne VBA anwenden, die bereits bei einigen anderen Datenabfragen erfolgreich funktioniert hat. Bei VBA bin ich also auf die Umsetzung durch Forenmitglieder angewiesen.
Wird durch die von dir beschriebenen Operationen für jede Abfrage im Hintergrund die Dateiquelle neu (und aktualisiert) abgerufen, oder genügt eine einzelne Abfrage, von der aus alle Daten bezogen werden können. Eine multiple Abfrage wollte ich eigentlich vermeiden, weil dadurch die Ladezeit spärbar ansteigt, je mehr Währungspaare abgefragt werden.
michu1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Jul 2017, 23:25

PQ

Beitragvon ehem. lupo1 » 05. Okt 2017, 16:58

sollte eigentlich jede Art von Daten lesen können.

Eingebaut ist es ab xl2016, vorher unter bestimmten Umständen ab xl2010 verwendbar.

Ich kenne es noch nicht, weil ich immer alte XL-Versionen verwende.
ehem. lupo1
 

Re: maximale Zeichenanzahl pro Zelle umgehen

Beitragvon Gast » 05. Okt 2017, 17:22

Alternativ fällt mir nur ein, die Abfrage zu Teilen, allerdings habe ich das bislang nicht geschafft.

Zeig' mal deinen Code.

Wenn du die Datei im Binärmodus einliest, kannst du die Länge angeben.
Gast
 

Re: maximale Zeichenanzahl pro Zelle umgehen

Beitragvon snb » 05. Okt 2017, 17:46

Code: Alles auswählen
Sub M_snb()
   With CreateObject("MSXML2.xmlHTTP")
      .Open "get", "https://bittrex.com/api/v1.1/public/getmarketsummaries", 0
      .send
      sn = Split(Split(Replace(.responsetext, "]}", ""), "[{")(1), "},{")
   End With
   
   Cells(1).Resize(UBound(sn)) = Application.Transpose(sn)
   Cells(1).Resize(UBound(sn)).TextToColumns , , , , 0, 0, -1, 0, 0
   Cells(1).CurrentRegion.Columns.AutoFit
End Sub


oder
Code: Alles auswählen
Sub M_snb()
   With CreateObject("MSXML2.xmlHTTP")
      .Open "get", "https://bittrex.com/api/v1.1/public/getmarketsummaries", 0
      .send
      sn = Split(Join(Filter(Split(Replace(Replace(Split(Replace(.responsetext, "]}", ""), "[{")(1), "},{", vbLf & ","), ":", ":,"), ","), ":", 0), ","), vbLf & ",")
   End With
   
   Cells(1).Resize(UBound(sn)) = Application.Transpose(sn)
   Cells(1).Resize(UBound(sn)).TextToColumns , , , , 0, 0, -1, 0, 0
   Cells(1).CurrentRegion.Columns.AutoFit
End Sub
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4974
Registriert: 25. Sep 2014, 16:37

Re: maximale Zeichenanzahl pro Zelle umgehen

Beitragvon michu1 » 06. Okt 2017, 13:30

snb hat geschrieben:
Code: Alles auswählen
Sub M_snb()
   With CreateObject("MSXML2.xmlHTTP")
      .Open "get", "https://bittrex.com/api/v1.1/public/getmarketsummaries", 0
      .send
      sn = Split(Split(Replace(.responsetext, "]}", ""), "[{")(1), "},{")
   End With
   
   Cells(1).Resize(UBound(sn)) = Application.Transpose(sn)
   Cells(1).Resize(UBound(sn)).TextToColumns , , , , 0, 0, -1, 0, 0
   Cells(1).CurrentRegion.Columns.AutoFit
End Sub


oder
Code: Alles auswählen
Sub M_snb()
   With CreateObject("MSXML2.xmlHTTP")
      .Open "get", "https://bittrex.com/api/v1.1/public/getmarketsummaries", 0
      .send
      sn = Split(Join(Filter(Split(Replace(Replace(Split(Replace(.responsetext, "]}", ""), "[{")(1), "},{", vbLf & ","), ":", ":,"), ","), ":", 0), ","), vbLf & ",")
   End With
   
   Cells(1).Resize(UBound(sn)) = Application.Transpose(sn)
   Cells(1).Resize(UBound(sn)).TextToColumns , , , , 0, 0, -1, 0, 0
   Cells(1).CurrentRegion.Columns.AutoFit
End Sub

Das funktioniert um Welten besser (und scheinbar einfacher) als über die Funktion "Datenabfrage" :shock: Vielen Dank für deine Arbeit!

Natürlich auch ein Dankeschön an die anderen Beteiligten :)
michu1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9
Registriert: 07. Jul 2017, 23:25


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: HKindler, MWOnline, steve1da und 18 Gäste