geöffnete Datei auslesen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

geöffnete Datei auslesen

Beitrag von erikafuchs »

Hallo Leute,
kann ich Daten aus einer geöffneten odt Datei auslesen? Zum Hintergrund:
Meine Schüler schreiben Tests mit calc Dateien. Diese werden alle in einem Ordner im Schulnetzwerk bearbeitet. Ich habe ein Makro geschrieben, das diese Tests alle ordentlich in einer Datei auflistet. Ich öffne dazu per Makro eine Schülerdatei nach der anderen und erstelle eine Kopie einer Seite in einer neuen "Sammeldatei". Das funktioniert prima wenn keine datei geöffnet ist, sonst nicht. Auch wenn ich die Dateien mit Tilde ("~") (wie heißen den diese Dateien?) überspringe geht es nicht. Ich bekomme die Meldung "... this file seems to be an unsupported one..." Schließe ich alle Datein, geht alles wieder wunderbar.
Grüße
Pit
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: geöffnete Datei auslesen

Beitrag von Karolus »

Hallo
Ich lese einmal 'odt' also writer, dann etwas von 'calc' ... und die Dateien mit ~tilde vorne sind .~lock Dateien die von OOo für derzeit geöffnete Dateien angelegt werden.
Was war nochmal genau deine Frage?

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: geöffnete Datei auslesen

Beitrag von balu »

Hallo

@Karo
Da is dem Pit ein Tippfähler unterlaufen, er meinte garantiert ods.


@Pit
Bevor wir hier alle bei Nebel im trüben fischen, häng doch lieber gleich eine Beispieldatei an. Denn ich befürchte das Du irgendwie das "Einlese-Makro" entweder falsch geschrieben hast, oder Tippfähler existieren, oder aber falsche Syntax anwendest. Abr das können wir nur anhand der Beispieldatei sehen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: geöffnete Datei auslesen

Beitrag von erikafuchs »

Lieber Karo,
stimmt, ein Tippfehler - sorry.
Lieber Karolus,
die Frage ist, ob es möglich ist, aus einer bereits geöffneten Datei Daten auszulesen, die Datei also ein zweites Mal zu öffnen.
Schön, dass ihr Euch dieses Problems annehmt.

Hier der Code:

Code: Alles auswählen

dim m, i, j, k, Anzahl, CountSheets as integer
dim aDateien() as string
dim Arg(0)
Dim mNoArgs()
Dim Arg(1) as new com.sun.star.beans.PropertyValue

sub einfuegen_Test
   If ( Not GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) ) Then
      GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
   End If
   oDoc=ThisComponent 
   oSheet=ThisComponent.sheets.getByName("Übersicht_Test")
   OrdnerPfad   
   aDateien = ReadDirectories(Pfad , TRUE , FALSE , FALSE )  'Das Verzeichnis mit den Schülerdateien
   If uBound( aDateien ) > -1 then
      Anzahl = uBound( aDateien ) + 1
      for i = lBound( aDateien) to uBound(aDateien)
         if InStr(aDateien(i),"_")=0 and InStr(aDateien(i),"~")=0 and right(aDateien(i),4)= ".ods" then 'sorgt u.A. dafür dass sich diese Datei nicht selbst einliest
			kPfad=aDateien(i)
			do
				kPfad =  right(kPfad,len(Kpfad)-InStr(kPfad, "/"))
			loop while InStr(kPfad, "/")>0
            sURL=ConvertToURL(aDateien(i))
            Arg(0).Name="Hidden"
            Arg(0).Value="True"
            Arg(1).Name="ReadOnly"
            Arg(1).Value="True"      
            dDoc=StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg())
            dDoc.unprotect("geheim4S")
            dSheet=dDoc.sheets.getByName("Daten")
            sname=dSheet.getCellByPosition(2,1).string & " " & dSheet.getCellByPosition(1,1).string    'liest den Schülernamen aus
            oDoc.Sheets().copyByName("Muster_Test",sname,1)   'benennt das neue Tabellenblatt mit dem Schülernamen
      		dDoc.close(True) 
      	end if   
      next i
   end if
end sub

Sub OrdnerPfad
i = 0
j = 0
do
i= i + 1
x = RIGHT(ConvertToURL(ThisComponent.URL),i)
if left(x,1) = "/" Then
j = j +1
End if
Loop While j < 1
k=i
pfad = LEFT(ConvertToURL(ThisComponent.URL), LEN(ConvertToURL(ThisComponent.URL))-i+1)
pfad = Pfad
End Sub
Das Programm bricht an der Stelle:
dDoc=StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg()) ab, die Frage nach der Zulassung der Makros ist dann geöffnet.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: geöffnete Datei auslesen

Beitrag von Stephan »

kann ich Daten aus einer geöffneten odt Datei auslesen?
ja. Bezug auf das DAteiobjekt herstellen und dann gewünschte DAten lesen.

(Da es ganz davon abhängt welche DAten gelesen werden Sollen (z.B. Fließtext, Tabellen, Eigenschaften) ist natürlich lediglich eine allgemeine ja-Antwort möglich.)
Schön, dass ihr Euch dieses Problems annehmt.
'schön' das Du es, WIEDER EINMAL, vermeidest eine KLARE Frage zu stellen.

zuerst ist die Rede von:
Ich bekomme die Meldung "... this file seems to be an unsupported one..."


dann aber plötzlich die Rede von eine ganz anderen Meldung:
die Frage nach der Zulassung der Makros ist dann geöffnet.
(was eigentlich ist bei eine Hidden per Code geöffneten Datei die 'Frage nach Zulasssung der Makros')

dann ist einmal die Rede von:
die Frage ist, ob es möglich ist, aus einer bereits geöffneten Datei Daten auszulesen
was nun wieder etwas anderes ist als die FRage:
die Datei also ein zweites Mal zu öffnen.
(denn natürlich muß man eine Datei die bereits geöffnet ist nicht ein zweites Mal öffnen um daraus Daten auszulesen)



Gruß
Stephan
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: geöffnete Datei auslesen

Beitrag von erikafuchs »

Lieber Stefan,
'schön' das Du es, WIEDER EINMAL, vermeidest eine KLARE Frage zu stellen.
ich weiß, du hast Probleme mit meinen Fragestellungen - heute sehe ich aber wirklich keinen Grund.
zuerst ist die Rede von:

Ich bekomme die Meldung "... this file seems to be an unsupported one..."



dann aber plötzlich die Rede von eine ganz anderen Meldung:

die Frage nach der Zulassung der Makros ist dann geöffnet.

Die fehlermeldung "... unsupported .." kommt als Fehlermeldung, das Prgramm stürzt an dieser Stelle ab - die enzulesende Datei ist allerdings geöffnet und bleibt an der Stelle stehen an der die Frage nach der Zulassung von Makros stehen, dieses Dialogfenster sehe ich nur wenn ich auf diese zweite Datei klicke die in der Taskleiste angezeigt wird . Diese Frage taucht nicht auf, wenn mein Programm normal abläuft, wenn also die einzulesenden Dateien nicht von Schülern geöffnet sind. Damit beantwortet sich wohl auch:
(was eigentlich ist bei eine Hidden per Code geöffneten Datei die 'Frage nach Zulasssung der Makros')
kann ich Daten aus einer geöffneten odt Datei auslesen?



ja. Bezug auf das DAteiobjekt herstellen und dann gewünschte DAten lesen.
da ich schon befürchtet habe, dass jemand sagt: klar kann man Daten aus einer Datei auslesen die geöffnet ist, habe ich lieber geschrieben das sie an anderer Stelle schon mal geöffnet ist:
die Datei also ein zweites Mal zu öffnen.



(denn natürlich muß man eine Datei die bereits geöffnet ist nicht ein zweites Mal öffnen um daraus Daten auszulesen)
... das magst du aber auch nicht.
ja. Bezug auf das DAteiobjekt herstellen und dann gewünschte DAten lesen.
.. das ist prima...
(Da es ganz davon abhängt welche DAten gelesen werden Sollen (z.B. Fließtext, Tabellen, Eigenschaften) ist natürlich lediglich eine allgemeine ja-Antwort möglich.)
mein Programm scheint ja abzustürzen wenn ich den Bezug herstelle und bevor ich Daten auslese. Dies ist die Zeile

Code: Alles auswählen

            dDoc=StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg())
Die einzige Zeile in meinem Codeausschnitt (der das Problem nachstellt) ist:

Code: Alles auswählen

sname=dSheet.getCellByPosition(2,1).string & " " & dSheet.getCellByPosition(1,1).string    'liest den Schülernamen aus
kommt hinterher.

(... hoffentlich findest du jetzt nicht wieder schlimme Fehler in meinen Erklärungen!)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: geöffnete Datei auslesen

Beitrag von balu »

Hallo Pit,

folgende Fehler sind mir in deinem Code aufgefallen.

1.
In der *sub einfuegen_Test* verzweigst Du in die *Sub OrdnerPfad*. Dort ordnest Du der Variablen "Pfad" einen String zu. Anschließennd verlässt Du die *Sub OrdnerPfad*. Der Fehler dabei ist allerdings der, das die Variable "Pfad" NIRGENDWO definiert ist. Es fehlt dir also noch ein

Code: Alles auswählen

    dim pfad as string
Du weiß wo das hingehört.


2.

Code: Alles auswählen

	Arg(0).Name="Hidden"
	Arg(0).Value="True"
	Arg(1).Name="ReadOnly"
	Arg(1).Value="True" 
Da wiederholst Du ein Fehler.
Der Parameter für Value wird NICHT in Anführungszeichen gesetzt. Folglich müsste das dann so aussehen.

Code: Alles auswählen

	Arg(0).Name="Hidden"
	Arg(0).Value= True
	Arg(1).Name="ReadOnly"
	Arg(1).Value= True
Kommst Du jetzt weiter?

Noch etwas.

Code: Alles auswählen

dim m, i, j, k, Anzahl, CountSheets as integer
m, i, j, k und Anzahl werden als Variant defeniert, aber nicht als Integer. Bist Du dir sicher das das so sein soll?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: geöffnete Datei auslesen

Beitrag von Stephan »

mein Programm scheint ja abzustürzen wenn ich den Bezug herstelle und bevor ich Daten auslese.
Wieso? Du öffnest hier doch einfach eine DAtei, ein Versuch zu einer bereits geöffneten DAtei einen Bezug herzustellen findet doch garnicht statt, denn dazu müßtest Du ja erstmal prüfen ob die Datei vielleicht schon geöffnet ist und dann entsprechend reagieren.

Wie das geht steht hier x-mal im Forum, z.B. hier:
viewtopic.php?f=18&t=1842

aber Dir ist ja ohnehin wichtiger hier wieder nur Verwirrung zu stiften indem Du ständig DEin genaues Anliegen variierst oder es überhaupt nicht konkret benennst.

Das ist doch der Punkt, Du müßtest eine KONKRETE FRage stellen und nicht mal so, mal so.



(... hoffentlich findest du jetzt nicht wieder schlimme Fehler in meinen Erklärungen!)

spar Dir einfach solche Kommentare, ich persönlich habe Dir in wahrscheinlich bereits mehr als 10 Threads immer wieder erklärt das es nötig ist konkrete Fragen zu stellen und nicht ständig die Aussagen beliebig zu wechseln, nur bist Du ja anscheinend völlig resistent gegen solche Hinweise.


Stephan
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: geöffnete Datei auslesen

Beitrag von erikafuchs »

Lieber Balu,
du bist mal wieder der Größte!

Code: Alles auswählen

            Arg(0).Name="Hidden"
            Arg(0).Value=True
            Arg(1).Name="ReadOnly"
            Arg(1).Value=True 
... kann ich ganz weglassen, das habe ich irgendwann einfach irgendwo abgekupfert, es geht auch ohne. Und vor Allem: jetzt klappt es!
Du passt wirklich auf: "Pfad" hatte ich definiert, der Code war ja nur ein Ausschnitt meines umfangreicheren Programms.
Noch etwas.

Code: Alles auswählen
dim m, i, j, k, Anzahl, CountSheets as integer


m, i, j, k und Anzahl werden als Variant defeniert, aber nicht als Integer. Bist Du dir sicher das das so sein soll?
...das habe ich nicht verstanden. Die Variablen sind doch als integer definiert.
Vielen Dank
Pit
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: geöffnete Datei auslesen

Beitrag von Karolus »

Hallo

Code: Alles auswählen

dim m, i, j, k, Anzahl, CountSheets as integer
Nein, lediglich 'CountSheets' wird als Integer dimensioniert, die anderen als Default-typ 'Variant'

Andererseits fällt mir kein Umstand ein wo diese blöde Variablen-dim'erei wirklich notwendig wäre, lass das doch einfach weg wenn du nicht mal weist was es bewirkt.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: geöffnete Datei auslesen

Beitrag von erikafuchs »

Lieber Karolus,
da bin ich wirklich geschockt. Dass ich vieles nicht weiß war mir klar, ich war aber immer der Meinung wenigstens das mit den Variablen hätte ich kapiert. Ich habe in meiner Makrobibel (von Thomas Krummbein) nachgeschlagen: Man kann zwar Variablen mit Kommas trennen - aber das Beispiel bezieht sich wirklich nur auf den Typ Variant. Andererseits weiß ich, warum Variablen definiert werden müssen (bei allen Programmsprachen die ich kenne). Dies hat Einfluss auf den Speicherplatz - ich habe früher auch mit DOS und Disketten und Speichern im kB gearbeitet (Ich habe mal Cobol gelernt, das wurde auf einer Siemens 4004 getestet, die nahm ein Stockwerk in der Uni ein und hatte vermutlich ein Magnetspeicher bei dem jedes einzelne Bit in einem Ferritkern gespeichert wurde - mit vermutlich 4kB Hauptspeicher!), das ist aber tatsächlich heute nicht mehr so ein Problem. Trotzdem - danke für den Hinweis!
Pit
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: geöffnete Datei auslesen

Beitrag von balu »

Hallo Pit,
Man kann zwar Variablen mit Kommas trennen
Vollkommen Korrekt!
Jedoch müssen dann jeder einzelnen Variablen auch sofort der Typ zugeordnet werden.

Code: Alles auswählen

dim m as integer, i as integer, j as integer, k as integer, Anzahl as integer, CountSheets as integer
Das bedeutet wiederum, das in einer Zeile unterschiedliche Typen defeniert werden können, also z.B. so

Code: Alles auswählen

dim maus as Object, igel as Integer, jeans as Long, kreuz as Date

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten