geöffnete Datei auslesen
Moderator: Moderatoren
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
geöffnete Datei auslesen
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
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
Re: geöffnete Datei auslesen
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
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)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: geöffnete Datei auslesen
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
@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
wehr rächtschraipfähler findet khan si behalden

-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: geöffnete Datei auslesen
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:
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.
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
dDoc=StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg()) ab, die Frage nach der Zulassung der Makros ist dann geöffnet.
Re: geöffnete Datei auslesen
ja. Bezug auf das DAteiobjekt herstellen und dann gewünschte DAten lesen.kann ich Daten aus einer geöffneten odt Datei auslesen?
(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' das Du es, WIEDER EINMAL, vermeidest eine KLARE Frage zu stellen.Schön, dass ihr Euch dieses Problems annehmt.
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:
(was eigentlich ist bei eine Hidden per Code geöffneten Datei die 'Frage nach Zulasssung der Makros')die Frage nach der Zulassung der Makros ist dann geöffnet.
dann ist einmal die Rede von:
was nun wieder etwas anderes ist als die FRage:die Frage ist, ob es möglich ist, aus einer bereits geöffneten Datei Daten auszulesen
(denn natürlich muß man eine Datei die bereits geöffnet ist nicht ein zweites Mal öffnen um daraus Daten auszulesen)die Datei also ein zweites Mal zu öffnen.
Gruß
Stephan
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: geöffnete Datei auslesen
Lieber Stefan,
Die einzige Zeile in meinem Codeausschnitt (der das Problem nachstellt) ist:
kommt hinterher.
(... hoffentlich findest du jetzt nicht wieder schlimme Fehler in meinen Erklärungen!)
ich weiß, du hast Probleme mit meinen Fragestellungen - heute sehe ich aber wirklich keinen Grund.'schön' das Du es, WIEDER EINMAL, vermeidest eine KLARE Frage zu stellen.
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: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')
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:kann ich Daten aus einer geöffneten odt Datei auslesen?
ja. Bezug auf das DAteiobjekt herstellen und dann gewünschte DAten lesen.
... das magst du aber auch nicht.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 ist prima...ja. Bezug auf das DAteiobjekt herstellen und dann gewünschte DAten lesen.
mein Programm scheint ja abzustürzen wenn ich den Bezug herstelle und bevor ich Daten auslese. Dies ist die Zeile(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.)
Code: Alles auswählen
dDoc=StarDesktop.loadComponentFromURL(sURL, "_blank", 0, Arg())
Code: Alles auswählen
sname=dSheet.getCellByPosition(2,1).string & " " & dSheet.getCellByPosition(1,1).string 'liest den Schülernamen aus
(... hoffentlich findest du jetzt nicht wieder schlimme Fehler in meinen Erklärungen!)
Re: geöffnete Datei auslesen
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
Du weiß wo das hingehört.
2.
Da wiederholst Du ein Fehler.
Der Parameter für Value wird NICHT in Anführungszeichen gesetzt. Folglich müsste das dann so aussehen.
Kommst Du jetzt weiter?
Noch etwas.
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
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
2.
Code: Alles auswählen
Arg(0).Name="Hidden"
Arg(0).Value="True"
Arg(1).Name="ReadOnly"
Arg(1).Value="True"
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
Noch etwas.
Code: Alles auswählen
dim m, i, j, k, Anzahl, CountSheets as integer
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
wehr rächtschraipfähler findet khan si behalden

Re: geöffnete Datei auslesen
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.mein Programm scheint ja abzustürzen wenn ich den Bezug herstelle und bevor ich Daten auslese.
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
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: geöffnete Datei auslesen
Lieber Balu,
du bist mal wieder der Größte!
... 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.
Vielen Dank
Pit
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
Du passt wirklich auf: "Pfad" hatte ich definiert, der Code war ja nur ein Ausschnitt meines umfangreicheren Programms.
...das habe ich nicht verstanden. Die Variablen sind doch als integer definiert.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?
Vielen Dank
Pit
Re: geöffnete Datei auslesen
Hallo
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
Code: Alles auswählen
dim m, i, j, k, Anzahl, CountSheets as integer
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)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: geöffnete Datei auslesen
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
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
Re: geöffnete Datei auslesen
Hallo Pit,
Jedoch müssen dann jeder einzelnen Variablen auch sofort der Typ zugeordnet werden.
Das bedeutet wiederum, das in einer Zeile unterschiedliche Typen defeniert werden können, also z.B. so
Gruß
balu
Vollkommen Korrekt!Man kann zwar Variablen mit Kommas trennen
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
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
wehr rächtschraipfähler findet khan si behalden
