Office.Interop.Word

30/10/2007 - 15:52 von Jens Bottenschein | Report spam
Hallo NG,

ich bin gerade dabei mit dem Bearbeiten von Word-Vorlagen in ASP.NET zu
experimentieren. Mittlerweile habe ich mir einige Webseiten dazu
durchgelesen und bin nun soweit, dass ich schonmal das Dokument
(Word-Vorlage .dot) öffnen und die darin enthaltenen Textfelder befüllen
kann. Die Datei anschliessend zu speichern und als application/octet-stream
an den Browser zu senden auch kein Problem.

Das ganze sieht dann in etwa so aus:

Dim DocumentFileName = "d:\temp\beispiel.dot"
Dim TemplateReadOnly = False
Dim TemplateIsVisible = True
Dim DocIsVisible = False
Dim DocReadOnly = False
Dim missing = System.Reflection.Missing.Value
Dim isFalse = False
Dim oDocCustomProps

Dim oWordApp As Microsoft.Office.Interop.Word.Application = New
Microsoft.Office.Interop.Word.Application()

Dim oDoc As Microsoft.Office.Interop.Word.Document
oDoc = oWordApp.Documents.Open(DocumentFileName, missing,
TemplateReadOnly, missing, missing, missing, missing, missing, missing,
missing, missing, TemplateIsVisible, missing, missing, missing, missing)

'
'Das hier nur zum Test

For Each x As Microsoft.Office.Interop.Word.Field In oDoc.Fields
x.Result.Text = "Inhalt aus ASP"
Next

'

Dim FileName = "d:\temp\fertig.doc"
oDoc.SaveAs(FileName, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing)
oDoc.Close(missing, missing, missing)

Dim file As System.IO.FileInfo = New System.IO.FileInfo(FileName)
Response.Clear()
Response.ContentType = "Application/MsWord.doc"
Response.AddHeader("content-disposition", "attachment;filename=" +
file.Name)
Response.AddHeader("Content-Length", file.Length.ToString())
Response.ContentType = "application/octet-stream"
Response.WriteFile(file.FullName)
Response.End()
oWordApp.Application.Quit(missing, missing, missing)

Nun ergeben sich folgende Probleme für mich:

1) Wie spreche ich die einzelnen Felder im Dokument mit Namen an? Bisher
kann ich das nur über den Index (Fields-Collection)
2) Textfelder zu befüllen ist kein Problem, aber wie aktiviere ich
beispielsweise Checkboxes?
3) Gehe ich mit obiger Vorgehensweise in die richtige Richtung? Oder gibt es
bessere Lösungen?

Gruß
Jens
 

Lesen sie die antworten

#1 Patrick Finger
30/10/2007 - 16:10 | Warnen spam
Dim oWordApp As Microsoft.Office.Interop.Word.Application =New
Microsoft.Office.Interop.Word.Application()



Das dürfte eigentlich nicht funktionieren. Meines Wissens làuft Word
nicht zuverlàssig in einer Mehrbenutzerapplikation auf einem Webserver.

Ich verwendet Aspose zu diesem Zweck.. Kostet zwar was, làuft aber sehr
stabil und einfach in der Handhabung.

aspose.com

PS: Für sehr einfache Anwendungen verwende ich rtf-Files. Diese können
einfachst als strings behandelt werden.

Gruss Patrick

Ähnliche fragen