Daten aus Webquery bearbeiten

Alles zur Programmierung im LibreOffice.
Antworten
farmerjoe
Beiträge: 6
Registriert: Mi 12. Jun 2019, 10:31

Daten aus Webquery bearbeiten

Beitrag von farmerjoe » Mi 12. Jun 2019, 10:38

Hallo zusammen,
ich habe bereits ein paar Wochen mit LO und Entwicklungsumgebung rumgespielt, komme aber nicht auf eine Lösung :?

An sich "ganz einfach" :lol:

Ich möchte Daten per Webquery aus importieren, jedoch vorher bearbeiten, da u.a. die HTML Formatierung oder Links enthalten sind.

Hab dazu dieses Script gefunden was wunderbar funktioniert

Code: Alles auswählen

sub webqry

	dim doc as object
	dim dis as object

	doc = ThisComponent.CurrentController.Frame
	dis = createUnoService("com.sun.star.frame.DispatchHelper")
	dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name  = "FileName"
	arg(0).Value = "<url>"
	arg(1).Name  = "FilterName"
	arg(1).Value = "calc_HTML_WebQuery"
	arg(2).Name  = "Source"
	arg(2).Value = "HTML_3"

	dis.executeDispatch(doc, ".uno:InsertExternalDataSource", "", 0,arg())

end sub
Nun dachte ich mir das ich statt die Daten in mein Dokument (doc) einfach in ein Array werfe und dann den Rest entsprechend ändere, aber irgendwie bekomme ich das nicht hin.
Die Frage ist ob das überhaupt geht bzw. wie es gehen könnte wenn es so nicht geht.

Da ich am Ende nicht nur diese eine Seite importieren und bearbeiten wollen würde, sondern mehrere müsste man das auch noch durch Webquery noch durch eine Schleife jagen, aber glaub das ist dann eher ein kleineres Problem.. wenn das natürlich schon irgendjemand hätte: noch besser :shock:

Vermutlich müsste man die entsprechenden URLs die man auslesen will in einem Array speichern und dann dieses Array durchgehen usw.

Bin gespannt ob ihr mir helfen könnt.

Vielen Dank :geek:

/edit

Mir fiel grad auf das ich evt. Array mit Recordset verwechselt habe :?:

F3K Total
Beiträge: 1847
Registriert: So 10. Apr 2011, 10:10

Re: Daten aus Webquery bearbeiten

Beitrag von F3K Total » Mi 12. Jun 2019, 17:02

Moin,
farmerjoe hat geschrieben:
Mi 12. Jun 2019, 10:38
Ich möchte Daten per Webquery aus importieren, jedoch vorher bearbeiten, da u.a. die HTML Formatierung oder Links enthalten sind.
Ich würde das anders herum machen, die nach Calc importierten Daten aus dem entsprechenden dataArray des Tabellenblattes auslesen, bearbeiten, und in ein neues Blatt hineinschreiben.

Beispiel:
  • Nimm eine leere Calc-Datei
  • nenne das erste Tabellenblatt IMPORT
  • nenne das zweite Tabellenblatt RAW_DATA
  • Führe das folgende Makro webqry aus

Code: Alles auswählen

sub webqry
	dim doc as object
	dim dis as object
	doc = ThisComponent.CurrentController.Frame
	dis = createUnoService("com.sun.star.frame.DispatchHelper")
	dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name  = "FileName"
	arg(0).Value = "http://www.xe.com/currencycharts"
	arg(1).Name  = "FilterName"
	arg(1).Value = "calc_HTML_WebQuery"
	arg(2).Name  = "Source"
	arg(2).Value = "HTML__crLive"
	dis.executeDispatch(doc, ".uno:InsertExternalDataSource", "", 0,arg())
    Copy_Raw_Data
end sub

Sub Copy_Raw_Data
    oIMPORTSheet = ThisComponent.Sheets.IMPORT
    oCursor = oIMPORTSheet.CreateCursor
    oCursor.gotoStart
    oCursor.gotoEndofUsedArea(true)
    oIMPORTRange = oCursor.RangeAddress
    aData = oCursor.dataarray
    oRAW_DATASheet = ThisComponent.Sheets.RAW_DATA
    oRAW_DATARange = oRAW_DATASheet.getcellRangebyposition(oIMPORTRange.Startcolumn,oIMPORTRange.StartRow,oIMPORTRange.Endcolumn,oIMPORTRange.EndRow)
    oRAW_DATARange.setdataarray(aData)
end Sub
Danach sollten im zweiten Tabellenblatt die rohen Daten stehen, die du natürlich nach Lust und Laune,"ganz einfach" :lol: formatieren kannst.
Gruß R

farmerjoe
Beiträge: 6
Registriert: Mi 12. Jun 2019, 10:31

Re: Daten aus Webquery bearbeiten

Beitrag von farmerjoe » Do 13. Jun 2019, 09:10

Guten Morgen,
das ist natürlich auch eine Möglichkeit, gar nicht in Betracht gezogen :idea:

Funktioniert, hätte dich vermutlich auch gewundert wenn nicht ;)

Ein paar Fragen hätte ich aber noch :D

1. Wenn ich webqry jetzt im Loop laufen lassen möchte, muss ich mir nur einen bauen - glaub das bekomme ich hin (hoffe ich) - jedoch bräuchte ich ein Array? in dem ich die entsprechenden Werte hinterlegen kann.. einerseits die URLs und andererseits die Zieltabellenblätter. Würde es ggf. mehr Sinn machen wenn man dieses statt im Quelltext in ein Array schreibt, evt. auf einem Tabellenblatt speichert und ausliest?
2. Aus alten Excel Zeiten habe ich mir angewöhnt Macros aufzunehmen um an den enstprechenden Quelltext zu kommen.. hier wird nun jedoch eine "Tonne" produziert von dem ich nicht genau weiß was ich alles brauch und was nicht. An sich wollte ich nur einen Wert ersetzen und eine Zeile (Überschrift/Zeile 1 löschen). Vermutlich - wegen der Programmiersprache - geht es aber nicht anders.

Mfg

F3K Total
Beiträge: 1847
Registriert: So 10. Apr 2011, 10:10

Re: Daten aus Webquery bearbeiten

Beitrag von F3K Total » Do 13. Jun 2019, 17:28

Moin,
wie/wo du die URL's speicherst, ob auf einem Tabellenblatt oder im Quelltext ist doch egal, was die besser passt.
An sich wollte ich nur einen Wert ersetzen und eine Zeile (Überschrift/Zeile 1 löschen)
Tja, so ist das, wenn man das Problem nur umreißt.
Wenn du genau beschreiben würdest, welche Werte du von wo, wohin schreiben möchtest, wäre vielleicht eine ganz einfache Lösung möglich.
Da du uns aber dermaßen im Nebel stochern läßt, und unsere Glaskugeln Urlaub machen, wird es damit wohl schwierig.
Am Besten lädst du eine Beispieldatei hoch an der du dein Ziel beschreibst. URL's ins Web inbegriffen!

Gruß R

farmerjoe
Beiträge: 6
Registriert: Mi 12. Jun 2019, 10:31

Re: Daten aus Webquery bearbeiten

Beitrag von farmerjoe » Mo 17. Jun 2019, 09:09

Guten Morgen,
ach so, ja, klar - kein Problem.
Ich hab glaub noch nie nach Code gefragt - außer vielleicht einen Kollegen - daher wusste ich nicht ob man seine Probleme nur theoretisch beschreibt anstatt einfach eine Tabelle "hinzuklatschen" mit "macht mal das es geht".

Also, darum geht es: Magic, the Gathering Karten :ugeek:

Ich würde jetzt gern die Seiten vom Tabellenblatt DAT nacheinander in das Tabellenblatt IMP importieren und nur die Werte (keine Formatierungen o.ä.) ab Zeile 2 in das jeweilige Tabellenblatt zur zugehörigen Seite (hier TMP, jeweils zweite Spalte auf Tabellenblatt DAT) übernehmen.

Zauberhaft wäre es wenn es das " EUR" in Spalte 4 der Werte dann entsprechend schon entfernen würde, wenn nicht - nicht so wild, dann kommt da eben noch eine Formel ran ;)

Am Ende kann ich dann recht unkompliziert meine bisherigen/neuen Karten bepreisen usw.
Andere Onlineseiten rufen teilweise Preise jenseits von Gut und Böse auf, hier nehme ich sie von einem lokalen Laden in Berlin - da ist schon wesentlich realistischer.. zumindest für das was ich mache :lol:

Mfg
magic.ods
(30.68 KiB) 14-mal heruntergeladen

farmerjoe
Beiträge: 6
Registriert: Mi 12. Jun 2019, 10:31

Re: Daten aus Webquery bearbeiten

Beitrag von farmerjoe » Do 27. Jun 2019, 10:04

Gibt es irgendwas was ich noch tun könnte falls es evt. zu unklar war was ich am Ende versuche zu erreichen?

farmerjoe
Beiträge: 6
Registriert: Mi 12. Jun 2019, 10:31

Re: Daten aus Webquery bearbeiten

Beitrag von farmerjoe » Fr 28. Jun 2019, 12:40

Ich habe selber noch etwas rumgebastelt.. da ich keine Ahnung habe wie ich Daten aus einem Sheet in ein Array packen oder auf die Daten zugreifen kann, habe ich das Array einfach mit Quelltext gefüllt:

Code: Alles auswählen

sub arraytest

dim arr(27,1)
dim pre$, suf$, a

pre = "http://www.der-andere-spieleladen.com/cgi-local/spieleladen/magic.pl?Group="
suf = "&Order=1"

arr(0,0)= pre & "Allianzen+%2F+Alliances" & suf
arr(0,1)= "ALL"
arr(1,0)= pre & "Dritte+Vierte+%2F+4th" & suf
arr(1,1)= "4ED"
arr(2,0)= pre & "Eiszeit+%2F+Ice+Age" & suf
arr(2,1)= "ICE"
arr(3,0)= pre & "Exodus+%2F+Exodus" & suf
arr(3,1)= "EXO"
arr(4,0)= pre & "F%FCnfte+%2F+5th" & suf
arr(4,1)= "5ED"
arr(5,0)= pre & "Felsenburg+%2F+Stronghold" & suf
arr(5,1)= "STH"
arr(6,0)= pre & "Heimatl%E4nder+%2F+Homelands" & suf
arr(6,1)= "MHL"
arr(7,0)= pre & "Invasion+%2F+Invasion" & suf
arr(7,1)= "INV"
arr(8,0)= pre & "Limitierte" & suf
arr(8,1)= "LIM"
arr(9,0)= pre & "Merkadische+Masken+%2F+Mercadian+Masques" & suf
arr(9,1)= "MMQ"
arr(10,0)= pre & "Nemesis+%2F+Nemesis" & suf
arr(10,1)= "NMS"
arr(11,0)= pre & "O+%2F+Antiquities" & suf
arr(11,1)= "ATQ"
arr(12,0)= pre & "O+%2F+Chronicles" & suf
arr(12,1)= "CHR"
arr(13,0)= pre & "O+%2F+Fallen+Empires" & suf
arr(13,1)= "FEM"
arr(14,0)= pre & "O+%2F+Unglued" & suf
arr(14,1)= "UGL"
arr(15,0)= pre & "Portal+1+%2F+Portal+1" & suf
arr(15,1)= "POR"
arr(16,0)= pre & "Portal+2+%2F+Portal+2" & suf
arr(16,1)= "P02"
arr(17,0)= pre & "Portal+3+asiatisch+%2F+Portal+3" & suf
arr(17,1)= "PTK"
arr(18,0)= pre & "Prophezeiung+%2F+Prophecy" & suf
arr(18,1)= "PCY"
arr(19,0)= pre & "Renaissance" & suf
arr(19,1)= "REN"
arr(20,0)= pre & "Sechste+%2F+6th" & suf
arr(20,1)= "6ED"
arr(21,0)= pre & "Sturmwind+%2F+Tempest" & suf
arr(21,1)= "TMP"
arr(22,0)= pre & "Trugbilder+%2F+Mirage" & suf
arr(22,1)= "MIR"
arr(23,0)= pre & "Urzas+Saga+%2F+Urza%27s+Saga" & suf
arr(23,1)= "USG"
arr(24,0)= pre & "Urzas+Schicksal+%2F+Urza%27s+Destiny" & suf
arr(24,1)= "UDS"
arr(25,0)= pre & "Urzas+Verm%E4chtnis+%2F+Urza%27s+Legacy" & suf
arr(25,1)= "ULG"
arr(26,0)= pre & "Visionen+%2F+Visions" & suf
arr(26,1)= "VIS"
arr(27,0)= pre & "Wetterlicht+%2F+Weatherlight" & suf
arr(27,1)= "WTH"

a=lbound(arr)
do
msgbox arr(a,0) & Chr$(13) & arr(a,1)
	a=a+1
loop until a > ubound(arr)

end sub
Da sich jetzt vieles an der URL ähnelt, habe ich sie in Pre(fix) und Suf(fix) aufgeteilt.
Die Messagebox im Loop bestätigt mir, dass ich nach und nach auf die Daten zugreifen kann.

Einfach jetzt das Webquery hier einfügen ging leider nicht.. wäre auch fast zu einfach gewesen.
Einerseits überschreibt er nur die Daten welche vorher im Sheet standen (was schlecht ist da die Anzahl der Zeilen unterschiedlich sind), zum anderen bleiben die ganzen Links im Hintergrund auch erhalten und stapeln sich ohne Ende.
Also irgendwie schon ein Stück weiter, aber eigentlich noch immer am Anfang.. hmm.

Der "richtige" Code würde dann vermutlich irgendwie so aussehen können:

Variablen definieren
Array füllen
Import Sheet auswählen
Loop >
Inhalt Import Sheet
Externen Link entfernen
Daten über Webquery abfragen
Daten in Import Sheet einfügen
Daten auf neues Sheet ohne Formatierung übertragen
Nächster Eintrag <

Leider machen mir die ganzen Dispatcher, Services, Frames, Sun.Star.Beans :?: usw. ziemlich Kopfzerbrechen.
Einfache Gehe zu X, Mache Y Anweisungen sind gefühlt seitenlange Anweisungen die am Ende ziemlich gleich aussehen :?

farmerjoe
Beiträge: 6
Registriert: Mi 12. Jun 2019, 10:31

Re: Daten aus Webquery bearbeiten

Beitrag von farmerjoe » Mo 1. Jul 2019, 14:22

Hallo zusammen,
ich hab jetzt noch weiter rumprobiert und -gebastelt und scheinbar funktioniert es.

Über die Sub start wird zuerst geprüft ob man das Ganze überhaupt starten will (evt. packe ich es in den Start der Mappe selber oder knüpfe es an einen Button), dann wird der alte Wert der Sammlung ermittelt (im Beispiel hier 211,20) und das Sub magic gestartet.

Dort wiederum - weil ich nicht wusste wie ich das Array anders befüllt bekomme - lege ich das Array an (als Beispiel nur mit zwei Adressen) und loope die Sub query bis ich durch bin, dann lösche ich den Inhalt des Blattes IMP.
Die Webabfrage von oben hat sich nicht geändert, nur das ich die entsprechenden Variablen übergebe, damit ich eine Schleife drehen kann.
Daten werden in IMP importiert, der Zielbereich wird gelöscht und die neuen Daten werden kopiert.

:ugeek: :ugeek: :ugeek:

Könnt ihr (oder du) mal schauen ob das soweit sauber geschrieben ist?
Es funktioniert, jedoch kann ich den Wert des Quelltextes nicht bestimmen.

Weiterhin wäre es natürlich cool wenn ich einfach einen Bereich aus einem Blatt "kopieren und in ein Array einfügen" kann, aber da komme ich nicht weiter.

Mfg
magic2.ods
(27.16 KiB) 4-mal heruntergeladen

Antworten