❤️ Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! ❤️
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Bestimmte Daten aus sehr vielen ODT-Dateien auslesen

WRITER hat alles, was Sie von einer modernen, voll ausgestatteten Textverarbeitung erwarten.
peon
Beiträge: 8
Registriert: Mo 28. Feb 2022, 22:43

Re: Bestimmte Daten aus sehr vielen ODT-Dateien auslesen

Beitrag von peon » Mi 2. Mär 2022, 09:54

Nochmals danke.

Bei der Änderung scheint es ein Problem zu geben.

Das gibt nun eine "Runtime Exception" aus, wenn ich es richtig verstehe in dieser Zeile:


Thiscomponent.Sheets(0).getcellrangebyposition(0,0,4,n).setDataArray(adressen)


D.h. es läuft zuerst etwa zwei Minuten lang durch (ohne etwas zu schreiben, das war auch bei der funktionierenden Version so), aber statt am Ende dann die Tabelle zu füllen kommt die Fehlermeldung.

Type: com.sun.star.uno.RuntimeException Nessage: .

Also nicht sehr aussagekräftig fürchte ich.

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Bestimmte Daten aus sehr vielen ODT-Dateien auslesen

Beitrag von mikele » Mi 2. Mär 2022, 11:35

Hallo,
mein Fehler.
Anstelle von

Code: Alles auswählen

adressen(i)=array(atmp)
müsste es kurz

Code: Alles auswählen

adressen(i)=atmp
sein... :oops:
Gruß,
mikele

peon
Beiträge: 8
Registriert: Mo 28. Feb 2022, 22:43

Re: Bestimmte Daten aus sehr vielen ODT-Dateien auslesen

Beitrag von peon » Mi 2. Mär 2022, 15:58

Danke - die Version wirft noch den selben Fehler, füllt aber dafür interessanterweise wieder die Tabelle.

Allerdings wird die Tabelle noch immer so gefüllt wie in der ursprünglichen Version, also alles in Spalte A.

Ebenfalls spannend: Jetzt kriege ich 1890 Zeilen (statt zuvor 1926). D.h. dieses mal sind wir näher an den 1887 (es sind effektiv 1887, nicht 1888 wie zuvor von mir behauptet) ODT Dateien dran :D

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Bestimmte Daten aus sehr vielen ODT-Dateien auslesen

Beitrag von mikele » Mi 2. Mär 2022, 17:18

Hallo,
da war denn doch mehr im Argen ... :oops:

Code: Alles auswählen

sub test

	'das Verzeichnis in dem die Dateien liegen	
	sVerzeichnis="Pfad zu deinem Verzeichnis"
	'Zugriff auf den Ordner und Auslesen aller Dateinamen
	oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
	aDateien = oSimpleFileAccess.getFolderContents(ConvertToUrl(sVerzeichnis),false )
    Dim arg(0) as new com.sun.star.beans.PropertyValue
    arg(0).Name = "Hidden"
    arg(0).Value = true
	n=ubound(aDateien)
	Dim adressen(n)

	'Durchlauf durch alle Dateien
	for i=0 to n
		adresse=""
		if right(aDateien(i),4)=".odt" then
			    'Datei im Hintergrund öffnen
				odoc=StarDesktop.LoadComponentFromURL(adateien(i), "_blank",0,arg())			
				oForms=odoc.Drawpage
				'Durchlauf durch alle graf. Elemente, Form1 auslesen
				for k=0 to oForms.count-1
				if oforms.getbyindex(k).name="Form1" then
					adresse=oforms(k).String
				end if
				next
				'Datei schließen
				odoc.close(false)		
		end if
		'Zerlegen des String in die einzelnen Absätze, max. 5
		atmp=split(adresse,chr(10),5)
		anz=ubound(atmp)
		'ggf. auf 5 Teile erhöhen
		redim preserve atmp(4)
		for l=anz+1 to 4
			atmp(l)=""
		next
		adressen(i)=atmp
	
	next
	'Texte in Spalte A schreiben
	Thiscomponent.Sheets(0).getcellrangebyposition(0,0,4,n).setDataArray(adressen)


end sub
Eventuell muss beim Zerlegen des Strings anstelle von chr(10) mit chr(13) gearbeitet werden.
Gruß,
mikele

peon
Beiträge: 8
Registriert: Mo 28. Feb 2022, 22:43

Re: Bestimmte Daten aus sehr vielen ODT-Dateien auslesen

Beitrag von peon » Mi 2. Mär 2022, 17:46

Wow, du bist ein Held :!:

Ich muss mir das Resultat noch im Detail anschauen, aber auf den ersten Blick sieht es hervorragend aus.

D.h. keine Fehlermeldung mehr und jede Zeile aus dem Textfeld kommt in eine eigene Spalte in der Tabelle.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten