Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Word.Document kopieren
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

Word.Document kopieren

beantworten | zitieren | melden

Hallo,

ich möchte das mein Object vom Typ Word.Document auch weiterhin verfügbar ist wenn die WordApplication zerstört wurde.

Wenn ich eine Objectzuweisung mache, wird anscheinend nur die Referenz zugewiesen und zeigt später ins Leere.

Eine Copy oder Clone eine Methode oder einen CopyCtor hat das Object anscheinend auch nicht.

Wie löse ich das?


.
private Nachricht | Beiträge des Benutzers
dr4g0n76
myCSharp.de - Experte

Avatar #avatar-1768.jpg


Dabei seit:
Beiträge: 2.920
Herkunft: Deutschland

beantworten | zitieren | melden

Da DU keine Kontrolle darüber hast, vielleicht reicht es auch aus, wenn Du Word mit Application.Visible = false startest? denn dann ist ja die Anwendung unsichtbar...
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

Ne, leider nicht.
Möchte das Document in meinen Businessklassen weiter verwenden und später mal in einer Datenbank speichern.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

das was du willst wird nicht funktionieren, da die document objekte an das application object gebunden sind, so wie alles letzten endes.
da applciation objetc ist der host.

sonst bräuchte man für office automation auch kein office mehr und die welt wäre soviel schöner

was genau willst du denn mit dem document noch machen?
wenn du es wieder bearbeiten willst brauch du das application object ja eh wieder
und ansonsten mußt du dir halt die datei speichern. die kannste auch in die db ablegen.
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

Hmm,

also ich möchte die Worddatei in der Datenbank speichern und später wieder in Word öffnen, auch im Webbrowser. Zum Transportieren bis zum Speichern wollte ich das in einem Datenobjekt als Document halten.

Bis es aber zum Speichern kommt, ist das Applicationobject schon längst zerstört.


Dann war wohl der Denkfehler anzunehmen das es eine Wordapplication und Worddocumente gibt. So wie halt auf dem Filesystem auch.

Kann das Word.Application Objekt nicht mehrere Documente aufnehmen?

Wenn ich das Dokumente auf dem Filesystem speichern würde, wird dann programmiertechnisch das Application Object mit gespeichert?


Bin jetzt verwirrt.

.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

Nein, das wird nicht mit gespeichert.

Eine doc-Datei enthält alle notwendigen Daten, um sozusagen dein Document-Object wieder herzustellen. Es enthält so gesehen ein serialisiertes Document Objekt.

Das Application Objekt representiert den Host, also die eigentliche Anwendung wie z.B. Word.

Word verwaltet nun mal alle Dokumente... wenn du ein Dokument öffnest wird die doc-Datei ausgelesen und daraus ein Document Objekt erstellt.
Da der Host die Verbindung zu dem Document Objekt ist, kannst du es nicht da von lostrennen.

Deine Möglichkeit besteht also nur darin das serialisierte Document Objekt zu speichern, also die doc Datei.

Öffnen im Webbrwoser kansnt du übrigens auch vergessen... wenn es geöffnet werden soll brauchst du ein Program mwas doc-Dateien versteht.

Vielleicht solltest du dir ein anderes Dateiformat suchen womit du arbeitest. Wenn du denn die Wahl hast.
Du kannst Word-Dateien (doc) auch als HTML Dateien abspeichern, die kannst du zumindest im Browser darstellen.
Seit Office 2003 kannst du sie auch in XML Dateien abspeichern, wodurch du das Dokumetn nachträglich ohne Word bearbeiten kannst, oder durch XLT etc. verarbeiten lassen kannst.
Das ist aber alles relativ komplex IMHO.
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

Ja, das mit dem Öffen über den Browser war auch anders gemeint

Also dann versuche ich mal das Document Object als typeof(Word.Document) zu serializien. Der Datenaustausch muss dann wohl über ein eigenes Object welches das ByteArray kapselt erfolgen.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

Nein nein du sollst das nicht serialisieren. Schreib ich so unverständlichen Text?

Du sollt das Dokment über Word-Automatisierung öffnen und speichern


wenn oDoc ein Document-Objekt ist, dann mach oDoc.Save zum speichern und
wenn oDocs das Application.Documents-Objekt ist mach oDocs.Open zum öffnen

Die Word-Datei kannst du dann in die DB speichern etc.


Serialisieren wird garnicht funktionieren. Ich hab das Wort ins Spiel gebracht um dir ein Vorstellung zu geben was ein DOC-Datei im Bezug auf das Document-Objekt ist.
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

Öhm, wie serializiere ich ein Word.Document?

Object ist nicht serializierbar gekennzeichnet...
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

Hab ich doch geschrieben. Nicht serialisieren! Das war nur erwähnt um einen Vergleich darzustellen...

Benutzt die Wordfunktionen zum speichern und laden von Dokumenten und arbeite mit den doc-Dateien.
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

ah, jetzt...


ok, funktioniert mittlerweile ganz gut.

Da mußten ein paar eigenen Klassen her.

Das Doc wird als ByteArray gehandelt und ist in einer eigenen Klasse gekapselt.
Eine andere Klasse stellt einen Editor dar, welcher auch diese serializierte Object öffnen kann.

Mit IsolatedStorageFiles kommt Office leider nicht zu recht. Hätte das ganze einfach gemacht.


Nur ein Problem kommt sporadisch. Manchmal wird die Normal.dot geändert.
Also die WordApp wird vom Design angepasst (Button, Menüs usw). Und manchmal speichert anscheinend Word die Normal.dot neu ab.
Tja öffne ich dann selber ein Word, dann sind meine angepassten Einstellungen vorhanden und nicht die Standardeinstellung.





.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

Wenn du an den Standardsymbolleisten bzw. Menüleisten etwas veränderst, speichert das Word ab bzw. möchte das speichern.

Wenn du eignen Leisten machst, speichert Word diese auch entweder im Dokument oder der normal.dot ab. Du kannst das einstellen wo er es abspeichern soll.

Beim Anpassen-Dialog gibts dafür unten die ComboBox mit den Dokumenten.
Programmatisch kommst du da auch dran... weiß unr grad nicht die Eigenschaft -.-
Nehm mal sowas mitden mMacroeditor auf, dann siehste das
private Nachricht | Beiträge des Benutzers