Hallo, kennt vielleicht jemand nen Link zu einem C#-Codeschnipsel in dem aus einer Word Doc Datei eine Txt Datei erstellt wird ? Letzten Endes soll einfach der Klartext der Worddatei in ein Byte-Array geschrieben werden, ohne dass großartig externe Tools eingesetzt werden müssen...
Ich hab schon versucht mit dem "Automating Word" zu arbeiten:
http://www.dotnet247.com/247reference/msgs/26/131289.aspx
Aber das funktioniert nicht mit ASP.NET sondern nur, wenn der Code client-mässig ausgeführt werden soll 😭
Will man das serverseitig nutzen kommt eine "Zugriff verweigert" - Fehlermeldung, wenn das
Word.ApplicationClass WordApp = new Word.ApplicationClass();
Hat jemand eine Idee ??
Danke
H.
Was genau willst du denn machen? Ein Word Dokument vom Client auf dem Server ändern? Wenn ja dann geht das nicht so einfach. Du musst dann das Word Dokument erst zum Server übertragen, dort evtl. in einem Temp. Verzeichnis ablegen das entsprechende Rechte hat und dann kannst du mit dem von dir genannten Artikel auch das TXT File schreiben.
Wichtig ist das der ASP.NET User auf dem Verzeichnis entsprechende Rechte hat. Wenn du natürlich mit der integrierten Sicherheit arbeitest muss der User bzw. die Gruppe die entsprechenden Rechte haben.
Mit freundlichen Grüßen
René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/
Hallo, danke erstmal für die schnelle Antwort...
An den Verzeichnisrechten kann es nicht liegen, da ich den Ordner bereits entsprechend freigegeben hatte und auch andere Operationen in diesem ausführen kann.
Diese Fehlermeldung erhalte ich:
Exception: System.Web.Services.Protocols.SoapException: Der Server konnte die Anforderung nicht verarbeiten. ---> System.UnauthorizedAccessException: Zugriff verweigert
Und an dieser Stelle:
Word.ApplicationClass newApp = new ApplicationClass();
Das heisst, das er schon Probleme mit dem Initialieren des Word-Objektes hat...
Und ich hatte eben gelesen, dass man in dcomcnfg die dcom einstellung für "Microsoft Word Document" ändern muss, und zwar dem ASPNET User die Sicherheitsrechte zum Ausführen geben. Leider gibt es bei mir in DCOM kein "Microsoft Word Document" ??
Liegt das daran, das ich Office 2003 nutze ?
So, hab nun per Registry Eintrag den DCOM "Microsoft Word Dokument" Eintrag hinbekommen. Hab auch schon unter Sicherheit "Start und Aktivierungsberechtigungen" und "Zugriffsberechtigungen" folgenden Usern alle Rechte eingeräumt:
Administratoren
ASP.NET Machine Account
IIS Prozesskonto IWAM_Rechnername
Interaktiv
Internetgastkonto IUSR_Rechnername
Jeder
System
Bei Zugriffsberechtigung sind sogar noch die User "Selbst" und "Administrator" angegeben!
Ich erhalte trotzdem noch die gleiche Fehlermeldung.
Danach hab ich unter dem Reiter "Identität" den User unter dem ich aktuell eingeloggt bin (der hat Admin-Rechte) eingetragen => Hat nichts gebracht...
Dort kann ich leider nicht den ASP.NET oder IUSR_Rechnername angeben, da die Passwörter zu den diesen Accounts vom System verschlüsselt gegeben werden und die mir nicht bekannt sind.
Das muss doch irgendwie gehen ??????
Gruß
H.
Ich kann dir da jetzt so direkt nicht helfen da ich das Problem noch nie hatte. Ich schaue heute Abend aber mal nach und versuche das ganze zu reproduzieren.. Melde mich dann spätestens morgen.
Mit freundlichen Grüßen
René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect
.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/
Ich vermute das Problem ist, das Word(letztenendes wird das ja gestartet) zwingend das Recht "Interactive with Desktop benötigt". Einen Prozess mit derartigen Rechten aus einem IIS-Thread zu starten dürfte nicht ganz leicht sein(oder unmöglich).
Hmm, auf der MSDN Seite wird eine mögliche Lösung vorgeschlagen, die ich aber schon ausprobiert habe. Dort steht aber immerhin, dass es möglich ist, indem man halt gewissen Usern per dcomcnfg die nötigen Rechte erteilt.
http://support.microsoft.com/kb/288367/DE/
H.
So, habs nun doch hinbekommen mit den Rechten:
Hab zunächst in
WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config
unter: <processModel...
das Attribut userName="machine" in
username="SYSTEM".
umgestellt, und neugestartet .
Unter den einbezogenen Bibliotheken hab ich:
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Word;
Dann ruf ich jetzt Word.Application jedesmal mit geneuerer Pfadangabe auf:
Microsoft.Office.Interop.Word.ApplicationClass newApp = new...
Unter DCOM die Identität auf mein aktuelles WinXP Konto (Adminrechte)...
Die Sicherheit-Einstellungen wie oben beschrieben!
Nun erstellt er mit ASP auf dem Server die Txt aus der Doc.
Leider kommt jetzt immer ein neuer Fehler, wenn ich versuch, die Txt-Datei auszulesen:
System.IO.IOException: Der Prozess kann nicht auf die Datei dat.doc.txt zugreifen, da sie von einem anderen Prozess verwendet wird...
Liegt das an dem newApp.Documents.Open ??
Ich hab newApp.Quit drin, muss ich da vielleicht noch was freigeben bevor ich die erstellte Txt Datei öffnen darf?
Gruß
H.
Hallo Haudi
Natürlich musst du das Word Objekt wieder freigeben, sonst sind die Dateien ja noch in Benutzung.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Jo, die Frage war nur, wie, da er sich erst gesträubt hatte, bzw. ihm newApp.quit und Marshal.ReleaseComObject alleine nicht gereicht hatten...
So hats bei mir (vorerst) endlich geklappt:
.
.
.
Nach Erstellung des WordObjektes und den Verarbeitungsschritten
// for closing the application and let winword.exe die
newApp.ActiveDocument.Close(ref Unknown,ref Unknown,ref Unknown);
newApp.Quit(ref Unknown,ref Unknown,ref Unknown);
System.Runtime.InteropServices.Marshal.ReleaseComObject(newApp);
newApp = null;
GC.Collect();
H.