[gelöst] Dateianhang in odt Datei

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Dateianhang in odt Datei

Re: Dateianhang in odt Datei

von lastraven » Di, 02.02.2010 08:08

Nach Ergänzung der manifest.xml klappt alles wunderbar. Danke nochmals :D

Re: Dateianhang in odt Datei

von Stephan » Mo, 01.02.2010 19:45

Hallo Michael,
Natürlich schreibt er an der ODF-Spezifikation vorbei! Und was anderes habe ich nicht geschrieben. Warum sollte dadurch das ODF-Format beeinflußt werden?
Lies es doch selbst nochmal:
Nein kannst wahrscheinlich nicht! Du versuchst etwas an der Spezifikation des ODF-Formates vorbei zu machen. Deine Ergänzungen werden nicht in der "Dateistruktur" erfasst. Das Dokumentenformat hat Vorgaben und eine Struktur.
und für mich verstand sich das als:

1. es geht nicht
2. das ist so weil Du versuchst etwas an der Spezifikation vorbei zu machen

War diese Annahme falsch, dann war sie das. (ich kann doch aber hier nur das zugeben, was ich wirklich glaubte verstanden zu haben)

Ging es Dir hingegen darum zu sagen es geht nicht weil er es so macht wie er es bisher macht, dann stimmt das natürlich, ist doch aber keine so besonders sinnvolle Antwort auf die Frage:
Kann ich OpenOffice überzeugen beim normalen Speichern-Dialog alle Dateien in das Archiv zu übernehmen bzw. beizubehalten : auch meine selbst hinzugefügten?
denn der Kern dieser Frage ist doch wohl: 'Wie kann ich ...' und die notwendige Antwort dann eben der Hinweis auf die Notwendigkeit des Eintrags in manifest.xml.


Das einzige was mich wundert: Ich habe gerade die ODF-Verwenden.odt von Dir benutzt. Wenn ich in der Datei über Zip eine Datei in den "Hilfe" Ordner einfüge, bleibt die auch nach neuem Öffnen und Speichern drin.
Mache ich es in einer neuen Datei mit einen neuen Ordner und einer eingehängten Datei verschwindet die Datei mit den Ordner beim Speichern.
Also langt es vielleicht schon den Ordner in die xml-Datei einzutragen.
So wie ich es sehe ergänzt OOo automatisch den file-Eintrag, wenn Änderungen gespeichert werden (gerade überprüft mit OOo 3.1.1).
Ich weiß aber nicht ob das generell funktioniert (also in jeder OOo-Version und bei jedem anderen Programm was ODF nutzt), und so würde ich das lieber immer mit eintragen - vielleicht ist das jedoch für OOo-Verhältnissse wirklich 'übervorsichtig' bzw. überflüssig.
Die Spezifikation verlangt meines Wissens das sowohl Ordner als auch Datei eingetragen werden und (im UNterschied zu den 'Standardordnern') explizit ein "media-type" für den zusätzlichen Ordner anzugeben ist.


Gruß
Stephan

Re: Dateianhang in odt Datei

von lastraven » Mo, 01.02.2010 18:21

@Stefan

Natürlich habe ich mir deine Beispieldatei auch angeschaut, bin jedoch nur deine BasicScripts durchgegangen. :roll:
Ich hatte nicht gewusst, dass zusätzlich noch die Archivinhalte in der manifest.xml festgehalten werden.

Wahrscheinlich hätte ich mich erstmal mit dem ODF-Format beschäftigen müssen (wie Michael schon geschrieben hatte).

Zwar komme ich erst morgen wieder zum Testen, danke aber schon jetzt euch beiden.

Re: Dateianhang in odt Datei

von ykcim » Mo, 01.02.2010 17:51

Hallo Stephan,
Nein, denn das ODF-Format wird dadurch nicht beeinflusst bzw. gegen die Spezifikation verstossen, denn diese erlaubt solche Zusätze natürlich, sind sie doch nichts Anderes als z.B. StarBasic-Makros in Dokumenten, welche auch nicht Bestandteil der ODF-Spezifikation, sondern nur durch die Spezifikation erlaubter Zusatz sind.
Natürlich schreibt er an der ODF-Spezifikation vorbei! Und was anderes habe ich nicht geschrieben. Warum sollte dadurch das ODF-Format beeinflußt werden?
Wird es natürlich nicht. Es wird nur wieder beim Öffnen eingelesen was eingetragen ist. Das mehr drin steht in der Datei stört dabei nicht. Solange er die Datei nicht entsprechende den Spezifikationen ordentlich als Zusatz einträgt, wird dieses aber auch nicht mehr gespeichert! Es wird noch nicht mal eingelesen. Einfach in die Zip-Datei kopieren langt nicht.
Und würde er nicht gegen die ODF-Spezifikation laufen, wären seine Anhänge nach dem neuen Bearbeiten ja noch da. Dann wüßte OO nämlich was es wieder zu speichern hat.

Das einzige was mich wundert: Ich habe gerade die ODF-Verwenden.odt von Dir benutzt. Wenn ich in der Datei über Zip eine Datei in den "Hilfe" Ordner einfüge, bleibt die auch nach neuem Öffnen und Speichern drin.
Mache ich es in einer neuen Datei mit einen neuen Ordner und einer eingehängten Datei verschwindet die Datei mit den Ordner beim Speichern.
Also langt es vielleicht schon den Ordner in die xml-Datei einzutragen.

Michael

Re: Dateianhang in odt Datei

von Stephan » Mo, 01.02.2010 16:10

Kann ich OpenOffice überzeugen beim normalen Speichern-Dialog alle Dateien in das Archiv zu übernehmen bzw. beizubehalten : auch meine selbst hinzugefügten?
ja, natürlich. Hinzugefügte Dateien müssen jedoch in der Datei manifest.xml, als zur ODT-Datei zugehörig, eingetragen werden.
(wobei ich mich frage wozu ich überhaupt bereits auf ein Beispiel ,verwiesen hatte wenn Du Dir nicht einmal die Mühe machst die hochgeladene DAtei anzusehen)
Du versuchst etwas an der Spezifikation des ODF-Formates vorbei zu machen.
Nein, denn das ODF-Format wird dadurch nicht beeinflusst bzw. gegen die Spezifikation verstossen, denn diese erlaubt solche Zusätze natürlich, sind sie doch nichts Anderes als z.B. StarBasic-Makros in Dokumenten, welche auch nicht Bestandteil der ODF-Spezifikation, sondern nur durch die Spezifikation erlaubter Zusatz sind.


Gruß
Stephan

Re: Dateianhang in odt Datei

von ykcim » Mo, 01.02.2010 15:47

lastraven hat geschrieben:Hallo,


Das <<Hinzufügen von Dateien ins Archiv>> funktioniert: Wenn man die Dateiendung der neu erstellte Datei in Zip umbenennt und es öffnet, sieht man auch die hinzugefügten Dateien.
Bearbeitet man jedoch das Dokument,speichert es, ändernt wieder die Dateiendung und schaut ins Zip-Archiv, sind die hinzugefügten Dateien nicht mehr da.


Kann ich OpenOffice überzeugen beim normalen Speichern-Dialog alle Dateien in das Archiv zu übernehmen bzw. beizubehalten : auch meine selbst hinzugefügten?
Nein kannst wahrscheinlich nicht! Du versuchst etwas an der Spezifikation des ODF-Formates vorbei zu machen. Deine Ergänzungen werden nicht in der "Dateistruktur" erfasst. Das Dokumentenformat hat Vorgaben und eine Struktur. Du hängst "von außen" Dateien rein. Diese werden in den xml-Dateien des Dokumentes nicht erfasst. Du mußt Dich mit mit dem ODF-Format beschäftigen und schauen ob Du Deine Anhänge irgendwie in die xml-Dateien einhängen kannst.

mfg
Michael

Re: Dateianhang in odt Datei

von lastraven » Mo, 01.02.2010 15:05

Hallo,

ich habe den Hinweis von turtle47 angeschaut und umgesetzt. Jedoch habe ich trotzdem noch ein Problem.
Wenn ich das neu erstellte Dokument öffne, es bearbeite und ganz normal speichere, speichert OpenOffice nur die ganz normale Dateistruktur eines odt-Dukumentes, d.h. das was ich vorher in das Archiv übernommen habe, ist dann wieder weg.


Das <<Hinzufügen von Dateien ins Archiv>> funktioniert: Wenn man die Dateiendung der neu erstellte Datei in Zip umbenennt und es öffnet, sieht man auch die hinzugefügten Dateien.
Bearbeitet man jedoch das Dokument,speichert es, ändernt wieder die Dateiendung und schaut ins Zip-Archiv, sind die hinzugefügten Dateien nicht mehr da.

Code: Alles auswählen

Sub ZipIt
Dim Arg()
Dim source, sURL as String
'Speicherort des aktuellen Dokumentes
source = ""
If(thisComponent.hasLocation) Then
	source = ConvertToUrl(thisComponent.Location)
	
	Gaprc_ZipFileIntoArchive(source, "C:/GruesseEuch.txt", "C:/NeuesDokument.odt") 'NeusDokument.odt wird mit neuem Archivinhalt erstellt
	
	'aktuelles Dokument
	thisComponent.getCurrentController().getFrame().setName("replaceMe") 
	sURL = ConvertToURL("C:/NeuesDokument.odt")
	'lade NeuesDokument in aktuelles Frame
	StarDesktop.loadComponentFromURL(sURL,"replaceMe",0,Arg())	
End If
'-----------------------------------------------------------------------------------------------------------------------------

End Sub
Public Sub Gaprc_ZipFileIntoArchive(strZipArchivePath As String, strFileToZipPath As String, strNewZipFilePath As String)

Dim args(0)
Dim args2(0)
Dim objZipService As Object
Dim objPackageStream As Object
Dim objUcb As Object
Dim objInputStream As Object
Dim objFileToZip As Object
Dim objFile As Object
Dim ParentFolder As Object

    Set objServiceManager = CreateObject("com.sun.star.ServiceManager")

    FileCopy strZipArchivePath, strNewZipFilePath
     
    Set objZipService = objServiceManager.createinstance("com.sun.star.packages.Package")
    args(0) = ConvertToUrl(strNewZipFilePath)
    objZipService.Initialize(args())
   
    args2(0) = False
    Set objInputStream = objZipService.createInstanceWithArguments(args2())
    Set objUcb = objServiceManager.createinstance("com.sun.star.ucb.SimpleFileAccess")
    Set objFile = objUcb.OpenFileRead(ConvertToUrl(strFileToZipPath))


    objInputStream.setInputStream(objFile)
    ParentFolder = objZipService.getByHierarchicalName("")
    'Die Datei GruesseEuch.txt in das Archiv hinzufügen (einschließlich dem Ordner Test)
    ParentFolder.insertByName("Test/GruesseEuch.txt", objInputStream)
 
    objZipService.commitChanges
End Sub 
Kann ich OpenOffice überzeugen beim normalen Speichern-Dialog alle Dateien in das Archiv zu übernehmen bzw. beizubehalten : auch meine selbst hinzugefügten?

Re: Dateianhang in odt Datei

von turtle47 » Sa, 23.01.2010 23:53

Hallo,
lastraven hat geschrieben:Wäre dies auch mit StarBasic umzusetzen?
Mit dem Code von gpl_racer am Wed-01.03.2006 20:56 sollte das gehen.

Die Reihenfolge sieht dann wie folgt aus:

> umbennen der Dateiendung in Zip
> Neue Datei reinkopieren (Code von gpl_racer)
> Alte Zip-Datei löschen
> Neue Zip-Datei umbenennen mit geänderter Dateiendung

Jürgen

Re: Dateianhang in odt Datei

von Stephan » Sa, 23.01.2010 20:34

Wäre dies auch mit StarBasic umzusetzen???????
Wie wäre es denn mit noch mehr Fragezeichen?


Stephan

Re: Dateianhang in odt Datei

von lastraven » Sa, 23.01.2010 20:28

lastraven hat geschrieben:@ykcim
Ich danke dir für den guten Vorschlag. Ich habe es auch schon ausprobiert und es funtioniert ohne Probleme. :D
Fall jemanden der Zugriff interessiert:

Code: Alles auswählen

ThisComponent.DocumentInfo.Description
Jedoch klappt das natürlich nur mit Texten. Möchte man eine Datei(PDF,...) hinzufügen, muss man das Archiv "anfassen"


@Stephan
Dies scheint genau das zu sein was ich gesucht habe. :-D Ich danke dir ebenfalls für diesen hilfreichen Tipp einschließlich der Beispieldatei. :wink:
Ich werde es mir am Montag genauer anschauen (und auch das empfohlene Fachbuch)
Die Neugier war doch größer und ich konnte bis Montag nicht warten :D
Das Betrachten bereits im Archiv enthaltener Daten funktioniert tadellos.
(vorheriges manuelles Einbinden in das Archiv notwendig durch :
  • umbennen der Dateiendung in Zip
  • entpacken
  • notwendiges reinkopieren
  • packen
  • Dateiendung wieder ändern )
Mein Wunsch wäre jedoch das Einbinden einer Datei über ein Makro in das Archiv bringen (z.B. wenn man die enthaltene Datei nicht nur betrachtet sondern auch ändert, soll die geänderte Version ins Archiv und die alte Datei ersetzen)
Wäre dies auch mit StarBasic umzusetzen??????? :?:

Re: Dateianhang in odt Datei

von lastraven » Sa, 23.01.2010 13:22

@ykcim
Ich danke dir für den guten Vorschlag. Ich habe es auch schon ausprobiert und es funtioniert ohne Probleme. :D
Fall jemanden der Zugriff interessiert:

Code: Alles auswählen

ThisComponent.DocumentInfo.Description
Jedoch klappt das natürlich nur mit Texten. Möchte man eine Datei(PDF,...) hinzufügen, muss man das Archiv "anfassen"


@Stephan
Dies scheint genau das zu sein was ich gesucht habe. :-D Ich danke dir ebenfalls für diesen hilfreichen Tipp einschließlich der Beispieldatei. :wink:
Ich werde es mir am Montag genauer anschauen (und auch das empfohlene Fachbuch)

Re: Dateianhang in odt Datei

von ykcim » Fr, 22.01.2010 13:16

OK, stimmt man kann mit Starbasic zippen.

mfg
Michael

Re: Dateianhang in odt Datei

von Stephan » Fr, 22.01.2010 12:46

mit Starbasic geht es nicht. Starbasic kann nicht entzippen und zippen.
doch, das geht mit Starbasic, der BasicAddOnBuilder (http://extensions.services.openoffice.o ... donBuilder) ist ein Beispiel dafür, aber auch von mir gab es im iNternet schon Dinge die das Zippen/Entzippen per Basic nutzten (z.B. ein Vorlagen-Installer).
Aktuell findest Du z.B. in dem Buch in meiner Signatur (Kapitel 8.5.6 "Das ODF-Format nutzen") ein im Detail ausführlich beschriebenes Beispiel, wo ich das Entzippen nutze um ein PDF und eine Bilddatei aus einem *.ods zu entpacken und für einen basic-Dialog zu nutzen (Das PDF als Hilfe-Text und das Bild als Bild für eine sChaltfläche).

Die zum Kapitel 8.5.6 gehörigen beispieldatei hänge ich unten an.



Gruß
Stephan
Dateianhänge
ODFverwenden.ods
(41.41 KiB) 170-mal heruntergeladen

Re: Dateianhang in odt Datei

von ykcim » Fr, 22.01.2010 12:00

Hallo einer,

mit Starbasic geht es nicht. Starbasic kann nicht entzippen und zippen. Man könnte es mit Java machen.
Wenn es aber gehen soll muß Du die mit Datei-Format beschäftigen und das hat es in sich. Vor allem wenn es immer fehlerfrei von anderen geöffnet werden soll.

Ich weiß nicht genau was Du vor hast, aber schau Dir mal unter "Datei -> Eigenschaften" die Register "Beschreibung" (dort: Kommentar)
und "Benutzerdefinierte Eigenschaften" an. Dort kannst Du eigentlich alle Informationen ablegen. Und die kannst Du mit Starbasic lesen und schreiben.

mfg
Michael

[gelöst] Dateianhang in odt Datei

von lastraven » Do, 21.01.2010 20:10

Hallo@all,

Eine odt Datei ist ja nichts anderes als ein Zip-Archiv. Das kann man ja mit einem ubenennen der Dateiendung (unter Windows) auch prüfen.
Bei der Bearbeitung eines Dokumentes muss OpenOffice das Archiv entpacken um Informationen auslesen und bearbeiten zu können.

Nun meine Frage:
Ist es per Makro möglich OpenOffice mitzuteilen/anzuweisen eine weiter txt-Datei in das Archiv zu übernehmen? :?:
Und falls dies möglich ist, wie kann ich bei der Bearbeitung auf dieses zusätzlich eingefügte Dokument zugreifen. :-?

(Ich möchte zu bestimmten Elementen(z.B. Platzhalter --> name, typ, ...) des Dokuments eine Information speichern die ich mit einem Makro auslesen kann.
All dies soll in eine Textdatei, die eine "Übersicht " darstellen soll. Diese Textdatei möchte ich zusätzlich ins Archiv haben.)

Nach oben