gelöst: Zugriff auf Calcdatei ohne Calc aufzurufen

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

Moderator: Moderatoren

ChristianMuc
**
Beiträge: 40
Registriert: Do, 25.12.2008 18:32

gelöst: Zugriff auf Calcdatei ohne Calc aufzurufen

Beitrag von ChristianMuc »

Hallo liebe Mitglieder, ich möchte folgendes realisieren:

In einer Calctabelle möchte ich 1000 Aufgaben (Rechenaufgaben) abspeichern. Ich möchte, dass ich dann per Zufallsgenerator auf diese Aufgaben zugreifen kann, und dieses dann z.B. mit Impress als eine Art Quiz anzeigen lassen.

Mein Problem: Wie greife ich auf die Datensätze der Calctabelle zu, ohne diese Tabelle zu öffnen? In den einschlägigen Dokumentationen finde ich leider nur Informationen, wie ich mit Datenbanken umgehe. Da ich leider keine Kenntnisse in Datenbankprogrammierung habe, möchte ich das lieber mit einer Calctabelle lösen, vorallem weil ich die Möglichkeit der automatischen Berechnung nutzen will.

Danke für Eure Hilfe im Voraus

Christian
Zuletzt geändert von ChristianMuc am Do, 15.01.2009 16:00, insgesamt 1-mal geändert.
Blaukraut
**
Beiträge: 22
Registriert: So, 11.01.2009 15:59
Wohnort: Allgäu

Re: Zugriff auf Calcdatei

Beitrag von Blaukraut »

Hallo,
bei mir funktioniert das so:

='file:///C:/myFile.ods'#$mySheet.myCell

als Beispiel:
='file:///C:/CALC/2009/auftrag09.ods'#$Grundformular.I16

Gruß
ChristianMuc
**
Beiträge: 40
Registriert: Do, 25.12.2008 18:32

Re: Zugriff auf Calcdatei

Beitrag von ChristianMuc »

Danke für die Antwort. Leider hast du mich falsch verstanden. Ich benötige keine Syntax für die Formel einer Calcanwendungzeile, ich benötige einen Befehl, mit dem ich auf die Daten per Makro zugreifen kann, ohne die Tabelle zu öffnen. Als Makro funktioniert leider der Befehl nicht.

Christian
Blaukraut
**
Beiträge: 22
Registriert: So, 11.01.2009 15:59
Wohnort: Allgäu

Re: Zugriff auf Calcdatei

Beitrag von Blaukraut »

Hallo,

ich habe jetzt einfach mal ein Macro aufgezeichnet und es funktioniert bei mir zumindest:

Code: Alles auswählen

sub Test
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$N$38"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "='file:///C:/CALC/2009/Auftragsliste.ods'#Tabelle1.F5"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

end sub

Ich habe die Datei "Auftragsliste.ods" nach der Aufzeichnung beendet und das Macro getestet.
Der Inhalt der Zelle F5 aus Tabelle 1 von "Auftragsliste" wird dabei wunderbar in die Zelle N38 der aufrufenden Tabelle übernommen, ohne dass die Datei "Auftragsliste.ods" geöffnet wird.

Gruß
ChristianMuc
**
Beiträge: 40
Registriert: Do, 25.12.2008 18:32

Re: Zugriff auf Calcdatei

Beitrag von ChristianMuc »

Achso, na mit dem Dispatcher habe ich nie gearbeitet. Ich dachte ja, man sollte beim Programmieren eher die Finger davon lassen. Ich werde es gleich mal ausprobieren.
Ich hab halt mit den Normalen Diensten bisher programmiert. Ich denke, dass das doch auch möglich sein sollte. Ich probiere aber gleich mal deine Lösung aus, vielleicht reicht das fuer mein Problem

Danke

Christian
ChristianMuc
**
Beiträge: 40
Registriert: Do, 25.12.2008 18:32

Re: Zugriff auf Calcdatei

Beitrag von ChristianMuc »

Hmmm, ich habe Probleme. Ich will ja die Daten der eine Tabelle nicht in eine andere Tabelle eintragen, sondern sie als String verfügbar haben. Ich weiss nicht, wie ich beim Dispatcher das so modifizieren muss, dass ich zb. den String in einer Msgbox auslesen kann.
Blaukraut
**
Beiträge: 22
Registriert: So, 11.01.2009 15:59
Wohnort: Allgäu

Re: Zugriff auf Calcdatei

Beitrag von Blaukraut »

Hallo,

eventuell so:
Zuerst in eine Zelle einfügen und dann den Inhalt der Zelle anzeigen?

Code: Alles auswählen

sub Test
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

    rem ----------------------------------------------------------------------
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "ToPoint"
    args1(0).Value = "$N$38"

    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

    rem ----------------------------------------------------------------------
    dim args2(0) as new com.sun.star.beans.PropertyValue
    args2(0).Name = "StringName"
    args2(0).Value = "='file:///C:/CALC/2009/Auftragsliste.ods'#Tabelle1.F5"

    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

	ocell = ThisComponent.sheets(1).getCellRangeByName("N38")
	msgBox(ocell.string)
end sub

(bei mir ist das die 2. Tabelle im Dokument, daher der Parameter sheets(1)

Wahrscheinlich gibt es eine noch viel einfachere Lösung, aber diese funktioniert zumindest.
(ich bin leider noch kein CALC-Held, kämpfe mich aber auch langsam durch)

Gruß
ChristianMuc
**
Beiträge: 40
Registriert: Do, 25.12.2008 18:32

Re: Zugriff auf Calcdatei

Beitrag von ChristianMuc »

Das Problem: Zwar könnte man das schon so realisieren, wie du es schreibst. Aber dann muss ich ja immer er eine Neue Calctabelle öffnen. Genau das will ich ja nicht, da ich die Daten, die einer ODS Datei abgelegt worden sind, in einem Textfeld einer Präsentation gezeigt werden soll. Und da in dieser Tabelle Aufgaben und Lösungen stehen, sollen ja gerade die Schüler diese Tabelle nicht sehen, sondern nur mit Impress die Aufgaben an die Wand mittels eines Beamers geworfen werden. Es müsste doch sowas wie eine Befehl geben, der auf die Daten einer Calctabelle zugreifen kann, ohne sie zu öffen, im Prizip sowas wie dein Befehl file.., nur halt objektorientiert wie alle anderen Sachen aus der API
ChristianMuc
**
Beiträge: 40
Registriert: Do, 25.12.2008 18:32

Re: Zugriff auf Calcdatei

Beitrag von ChristianMuc »

Ich habe hier im Netz eine Lösung gefunden: Es wird die Tabelle versteckt geöffnet, ohne dass man sie sehen kann.

http://www.starbasicfaq.de/Wiekannmanei ... l#Zweig145
Antworten