BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Daten speichern

Alles zur Programmierung im OpenOffice.org
Peter18
Beiträge: 10
Registriert: So 19. Jul 2020, 12:37

Daten speichern

Beitrag von Peter18 » So 19. Jul 2020, 12:55

Ein freundliches Hallo an alle,

ich lese mit Pascal Daten aus einer Calc-Tabelle. Nun möchte ich auch Daten ändern und speichern.

Mit

Code: Alles auswählen

      Par          := VarArrayCreate([0, 0], varVariant);   // [lowest index, highest index]
      oOpenOffice  := CreateOleObject('com.sun.star.ServiceManager')                     ;
      Par[0]       := oOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')   ;
      Par[0].Name  := 'Hidden'                                                           ;
      Par[0].Value := True                                                               ;
      oStarDesktop := oOpenOffice.createInstance('com.sun.star.frame.Desktop')           ;
      oFCP          := oOpenOffice.createInstance('com.sun.star.ucb.FileContentProvider');
      Path          := oFCP.getFileURLFromSystemPath('', oFilNam)                        ;
      oFil          := oStarDesktop.loadComponentFromURL( Path, '_blank', 0, Par )       ;
      oTab          := oFil.Sheets.getByName( oShNam )                                   ;
öffne ich die Tabelle.

Ich habe aber in "tausenden" Unterlagen keinen Hinweis gefunden, wie ich eine geänderte Tabelle speichern kann. Vielleicht habe ich das Prinzip noch nicht richtig drauf, um es in der API-Referenz zu finden.

Hat jemand einen Tipp??

Grüße von der Nordsee

Peter

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Daten speichern

Beitrag von craig » So 19. Jul 2020, 14:09

Hallo Peter,

Basic-Code:

Code: Alles auswählen

Sub Speichern

REM Filename
sFName="MeinDokument.ods"

REM build the whole path and documentname
		sPath ="c:\temp\" & sFName

REM convert path to URL   
   fileurl=converttourl(sPath)

REM everything in one step:
REM if folder doesn't exist, make new folder 
REM then write new document in the new or old folder
   odoc.storeasurl(fileurl,dummy())
End Sub   
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Peter18
Beiträge: 10
Registriert: So 19. Jul 2020, 12:37

Re: Daten speichern

Beitrag von Peter18 » So 19. Jul 2020, 14:20

Hallo Craig,

Dank Dir für Deine Antwort!

"storeasurl" habe ich gesehen, aber ich möchte die Tabelle unter dem alten Namen speichern. dafür habe ich "store" gesehen, aber es hat nicht funktioniert. Vielleicht habe ich das falsche Objekt verwendet. [oFCP.store()]

Grüße von der Nordsee

Peter

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Daten speichern

Beitrag von craig » So 19. Jul 2020, 16:13

Hallo Peter,
Peter hat geschrieben:"storeasurl" habe ich gesehen, aber ich möchte die Tabelle unter dem alten Namen speichern.
  1. Ein neues bisher nicht gespeichertes Dokument besitzt KEINE URL
    URL-Wert = ""
  2. Ein bereits gespeichertes Dokument besitzt eine URL, inklusive des Dateinamens und der Dateiextension
Datentyp der URL = String

Wenn Du nun Dein geöffnetes Dokument speichern möchtest,
dann brauchst Du doch nur die URL auslesen:

Code: Alles auswählen

sUrl=ThisComponent.Url
Die Variable sUrl wird nun der Speicheranweisung übergeben und fertig.
Es gibt 3 Variante zur Speicherung:
6.1.2 Wie kann man Dokumente speichern?

Statt des Filter-Eigenschafts dummy(), beachte weiter unten:
Wie lauten die möglichen Filter zum Speichern und Exportieren von Dokumenten?
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Peter18
Beiträge: 10
Registriert: So 19. Jul 2020, 12:37

Re: Daten speichern

Beitrag von Peter18 » So 19. Jul 2020, 17:53

Hallo Craig,

nochmals Dank für Deine Antwort!

Da hat es wohl ein Missverständnis gegeben!
Peter18 hat geschrieben:
So 19. Jul 2020, 12:55
Nun möchte ich auch Daten ändern und speichern
Es ist also kein neues Dokument!

Mit "oFil.store(true);" oder "oFil.store();" erhalte ich diese Fehlermeldung:

Grüße von der Nordsee

Peter
Dateianhänge
Fehler.JPG
Fehler.JPG (19.21 KiB) 6100 mal betrachtet

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Daten speichern

Beitrag von craig » So 19. Jul 2020, 19:39

Hallo Peter,

Du hast keine URL angegeben:

REM Dieses leere Array muss deklariert werden
Dim Dummy()

oFil.store(dateiurl,dummy())
oder
oFil.storeToUrl(dateiurl,dummy())
oder
oFil.storeAsUrl(dateiurl,dummy())


Basic Beispiel:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main1
Dim oDoc as Object
Dim sUrl as String
Dim dummy()

oDoc=ThisComponent

REM Einlesen der URL in die Stringvariable
sURL=oDoc.Url

Msgbox sUrl,64, "Die URL"

REM Speichern
oDoc.store(sURL,dummy())

End Sub
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Peter18
Beiträge: 10
Registriert: So 19. Jul 2020, 12:37

Re: Daten speichern

Beitrag von Peter18 » Di 21. Jul 2020, 11:42

Hallo Craig,

Dank Dir nochmals für Deine Antwort!

In der Bescheribung hatte "store" keine Parameter (was auch Sinn macht) daher habe ich es ohne probiert. Aber mit hat es auch noch nicht geklappt.

Für die Experimente habe ich eine Subroutine erstellt:
procedure T_OO.SaveCalc;
var
Par : OLEVariant;

begin
Par := VarArrayCreate([0, 0], varVariant) ;
Par[0] := oOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Par[0].Name := 'Hidden' ;
Par[0].Value := True ;
oFil.store( oFil.Url, Par ) ;
end;
Ich erhalte die Fehlermeldung Fehler2. "Par[0].Name := 'Hidden'" erschien mir sinnvoll, um nachfragen zu vermeiden. Der Versuch:
procedure T_OO.SaveCalc;
var
Par : OLEVariant;

begin
oFil.store( oFil.Url, Par );
end;
lieferte ebenfalls eine Fehlermeldung (Fehler3). Auch der Versuch mit "unassigned" ergab einen Fehler (Fehler4).
procedure T_OO.SaveCalc;
var
Par : OLEVariant;

begin
Par := unassigned;
oFil.store( oFil.Url, Par ) ;
end;
Es sieht so aus, als ob für "Par" etwas bestimmtes erwartet wird.

Grüße von der sonnigen Nordsee

Peter

By the way: wie kann ich die Bilder in den Text setzen?
Dateianhänge
Fehler4.JPG
Fehler4.JPG (21.18 KiB) 6071 mal betrachtet
Fehler3.JPG
Fehler3.JPG (19.24 KiB) 6071 mal betrachtet
Fehler2.JPG
Fehler2.JPG (19.21 KiB) 6071 mal betrachtet

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Daten speichern

Beitrag von craig » Di 21. Jul 2020, 12:50

Hallo Peter,

ich habe noch nie mit Pascal programmiert, deshalb sind mir
Deine geposteten Fehlermeldungen vollkommen fremd.

Hier ein Link zur Openoffice-API zum Thema: interface XStorable → store, storetourl, storeasurl.
Openoffice-API hat geschrieben:store
void
store()
raises( ::com::sun::star::io::IOException );

Description
stores the data to the URL from which it was loaded.

Only objects which know their locations can be stored.
Demnach wird store tatsächlich ohne Parameter verwendet und laut Beschreibung speichert die
Anweisung store das Dokument an der Stelle und unter dem Namen von dem es ursprünglich geladen wurde.
Daraus folgt, dass die URL bekannt sein MUSS!

Ist die URL aus welchen Gründen auch immer nicht bekannt, kommt es zu Fehlermeldungen.

Um auf der sicheren Seite zu sein, würde ich mit storetourl, unter Angabe aller Parameter arbeiten.
Dies setzt voraus:
  1. Das Dummy-Array für die Filtereigenschaften muss deklariert sein

    Code: Alles auswählen

    Dim dummy() as Variant
  2. Die URL muss entweder direkt übergeben werden:

    Code: Alles auswählen

    storeToUrl(ThisComponent.Url,dummy())
    oder man übergibt eine Stringvariable in die zuvor die URL eingelesen wurde:

    Code: Alles auswählen

    Dim dummy() as Variant
    Dim sUrl as String
    	sUrl=ThisComponent.Url
    		storeToUrl(sUrl,dummy())
Mehr kann ich zu Deinem Thema nicht beitragen.
Bin nur ein dummer Basic-Autodidakt :lol:
Peter hat geschrieben:By the way: wie kann ich die Bilder in den Text setzen?
Setze den Cursor an die Position wo ein Dokument/ Bild
eingefügt werden soll, dann wie gewohnt:
Dateianhänge → Dateien hinzufügen.
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Peter18
Beiträge: 10
Registriert: So 19. Jul 2020, 12:37

Re: Daten speichern

Beitrag von Peter18 » Di 21. Jul 2020, 14:14

Hallo Craig,

Dank Dir nochmals für Deine sehr ausführliche Antwort!

Mit "oFil.store();" erhalte ich die Fehlermeldung:
Fehler5.JPG
Fehler5.JPG (19.93 KiB) 6052 mal betrachtet
Ich habe den Eindruck, dass ich ev. das falsche Objekt anspreche und die Methode dort nicht vorhanden ist. Ich habe aber noch keine Informationen gefunden, die darüber Auskunft geben. Vielleicht hast Du einen Tipp?

Denn mit "oFil.storeAsURL( oFil.Url, Par );" erhalte ich auch eine Fehlermeldung:
Fehler6.JPG
Fehler6.JPG (18.07 KiB) 6052 mal betrachtet
"oFil.Url" enthält den vollständigen Pfad und Dateinamen.
craig hat geschrieben:
Di 21. Jul 2020, 12:50
Bin nur ein dummer Basic-Autodidak
Wer sich eine Programmiersprache selbst beibringt kann nicht dumm sein! Übrigens auch ich habe mir so verschiedene Sprachen beigebracht.

Grüße von der wieder sonnigen Nordsee

Peter

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Daten speichern

Beitrag von craig » Di 21. Jul 2020, 20:43

Hallo Peter,
Peter hat geschrieben:Ich habe den Eindruck, dass ich ev. das falsche Objekt anspreche
Deshalb mein vorheriger Hinweis mit storeToUrl mit expliziter Angabe der URL und dem leeren Filtereigenschafts-Array.
Peter hat geschrieben:Ich habe aber noch keine Informationen gefunden, die darüber Auskunft geben. Vielleicht hast Du einen Tipp?
Ob Dich folgende Info's weiterbringen weiß ich nicht:
Fehlerbild #5: Kann ich nicht zu ordnen.

Fehlerbild #6:
OpenOffice-API → com.sun.star.task.ErrorCodeIOException
Dann die weiterführenden Links ansehen:
exception Exception
ProUNO - Bridge - Exceptions and Errorcodes
interface XInterface
usw.

----------------------------------------------------------
Peter hat geschrieben:Denn mit "oFil.storeAsURL( oFil.Url, Par );" erhalte ich auch eine Fehlermeldung:
oFil.storeAsURL( oFil.Url, Par ) → erwartet eine leeres Array oder Datei-Filtereigenschaften beinhaltet.
Du übergibst Dein definiertes Array, das aber keine Datei-Filtereigenschaften enthält:
http://www.dannenhoefer.de/faqstarbasic ... tml#Filter

Mein Vorschlag:
Erstelle ein neues, leeres und eindimensionales Array.
Schließe es ggf. mit Klammern ab.

Code: Alles auswählen

oFil.storeAsURL( oFil.Url, NeuesArray() );
Prüfe ob oFil.Url tatsächlich eine URL enthält.
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Antworten