Laden...

Word-Dokument aus Vorlage automatisch erstellen

Erstellt von Pharao2k vor 16 Jahren Letzter Beitrag vor 16 Jahren 6.389 Views
P
Pharao2k Themenstarter:in
100 Beiträge seit 2005
vor 16 Jahren
Word-Dokument aus Vorlage automatisch erstellen

Hiho,
Ich wühle mich grad seit Stunden durch die vielen Informationen bzgl. de Zugriff von C# auf Office/Word, bin aber irgendwie nun verwirrter als vorher ^^

Habe mir die PrimaryInteropAssemblies und das VSTO installiert, aber bis auf einzelne Erfolge (bspw. Word starten samt Addin, welches ne Meldung ausgibt) hab ich noch nix geschafft.

Was ich brauche:
Mein Programm soll eine Word-Vorlage laden, einige Variablen/Platzhalter dort ersetzen, speichern und in Word öffnen...wie schaff ich das? Bin ich mit vsto überhaupt auf dem richtigen Weg?

Bitte helft mir ^^
Thx

Pharao2k

738 Beiträge seit 2007
vor 16 Jahren

hi,

benutz am besten den MacroRecorder in Word, um dir den Code anzeigen zu lassen, der den Funktionen die die ausführst zu grund liegt... in der MSDN steht dann zu den jeweiligen Methoden/Properties/.. auch so einiges!

Ansonsten ist deine Frage ein klein bisschen ungenau, aber wenn du bei bestimmten aktionen nicht weiter kommst, kannst ja wieder hier im Forum fragen!

P
Pharao2k Themenstarter:in
100 Beiträge seit 2005
vor 16 Jahren

Naja die Makro-Aufzeichnung bringt mir nich so besonders viel fürchte ich.

Ich versuchs mal genauer zu erklären...
Mein Programm stellt dem Mitarbeiter eine Oberfläche zur Verfügung, in der er einige Werte eingibt (manuell, in Textfelder etc.). Nach dem Drücken eines Buttons soll dann (im hintergrund) eine Word-Vorlage geladen werden, in welcher einige Platzhalter durch die vorher eingegebenen Werte ersetzt werden sollen. Dieses nun fertig ausgefüllte Dokument soll DANN dem Mitarbeiter in Word geöffnet werden, wo dann zur Not noch manuelle Änderungen durchgeführt werden können.

Mein Problem dabei ist die Anbindung an Word, also wie öffne ich dort eine Vorlage etc.

K
165 Beiträge seit 2007
vor 16 Jahren

Hallo Pharao2k,

da ich vor gar nicht all zu langer Zeit genau das gleiche Problem wie Du hatte, hab ich eine Antwort auf lager 😄.

Als erstes benötigst Du die

Microsoft Word 11.0 Object Libary (MSOffice 2003), aber sollte in deinem Package drin sein.

Wenn Du die dll eingebunden hat, kanns auch schon losgehen:

Als erstes solltes Du dir in Word deine Textmarker in deiner Vorlage erstellen:

Geh dorthin wo Du deine Daten einfügen willst und klicke auf Einfügen -> Textmarke und merk Dir dann den Namen 😉

Wenn Du fragen zum Code hast, einfach Fragen ;


Microsoft.Office.Interop.Word.ApplicationClass oWord = new Microsoft.Office.Interop.Word.ApplicationClass();

            object readOnly = false;
            object isVisible = true;
            object missing = System.Reflection.Missing.Value;
            object file = PfadZurDatei;
            object oBookMark = "Textmarker"
            String textMarkerWert = String.Empty();
            Microsoft.Office.Interop.Word.Document oWordDoc = oWord.Documents.Open(ref file, ref missing, ref readOnly, ref missing
                , ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible
                , ref missing, ref missing, ref missing, ref missing);

            oWordDoc.Activate();
            oWordDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textMarkerWert;
            oWord.Selection.TypeParagraph();
            oWordDoc.SaveAs(ref file, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing
                , ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing
                , ref missing, ref missing);

Ist jetzt ein wenig schlampig gepostet, aber ich bin auf Arbeit und hab kaum Zeit 😠

//edit:

Mittels:


            oWord.PrintPreview = true;
            oWordDoc.PrintPreview();

Kannst Du Dir dann auch eine Druckvorschau anzeigen lassen 😉

If u want to finish first, u have to finish first.
446 Beiträge seit 2004
vor 16 Jahren

Hallo,

danke für den Beitrag Kalleberlin, genau sowas brauch ich atm.

Gibts irgend eine Möglichkeit die Dokumentation sprich die Beschreibung der einzelnen Funktionen in der IntelliSense also in der IDE zu aktivieren?

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

A
2 Beiträge seit 2007
vor 16 Jahren

Hallo zusammen,

da ich das gleich problem habe wie Pharao2k"

Was ich brauche:
Mein Programm soll eine Word-Vorlage laden, einige Variablen/Platzhalter dort ersetzen, speichern und in Word öffnen...wie schaff ich das? Bin ich mit vsto überhaupt auf dem richtigen Weg?

Ich versuchs mal genauer zu erklären...
Mein Programm stellt dem Mitarbeiter eine Oberfläche zur Verfügung, in der er einige Werte eingibt (manuell, in Textfelder etc.). Nach dem Drücken eines Buttons soll dann (im hintergrund) eine Word-Vorlage geladen werden, in welcher einige Platzhalter durch die vorher eingegebenen Werte ersetzt werden sollen. Dieses nun fertig ausgefüllte Dokument soll DANN dem Mitarbeiter in Word geöffnet werden, wo dann zur Not noch manuelle Änderungen durchgeführt werden können.

Mein Problem dabei ist die Anbindung an Word, also wie öffne ich dort eine Vorlage etc.

und so habe ich mir word geofnet!

Word.Application myWorldApp = new Word.ApplicationClass();
myWorldApp.Visible = true;

ich benutze "Microsoft Word 9.0 Object Library"

der lösung von Kalleberlin
habe ich leider nicht verstanden bzw. hat bei mir nicht funktioniert!!!! (helfe!!)

bitte um hilfe
thx

N
750 Beiträge seit 2004
vor 16 Jahren

hallo,

also fett-schrift kommt schonmal sehr gut an!!!

der lösung von Kalleberlin
habe ich leider nicht verstanden bzw. hat bei mir nicht funktioniert!!!! (helfe!!)

und was jetzt genau ?? siehe [Hinweis] Wie poste ich richtig? Pkt. 5

?( wer suchet, der findet auch! :]

A
2 Beiträge seit 2007
vor 16 Jahren

ich bin wieder!,

also ich habe word 2000 d.h "Microsoft Word 9.0 Object Library", deshalb kann ich leider nicht benutzen!! 🙁
Microsoft.Office.Interop.Word.ApplicationClass oWord = new Microsoft.Office.Interop.Word.ApplicationClass();
benutzen! (oder hat jemand eine Idee?)

ich öffne meine vorlage mit:

Word.ApplicationClass myWordApp = new Word.ApplicationClass();
object Dateiname = @"C:\Temp\wolrd.dot";
object neueVorlage = false;
object DokumentenTyp = 0;
object Sichtbar = true;
object oBookMark = "name";

    Word.Document aDoc = myWordApp.Documents.Add(ref Dateiname, ref neueVorlage, ref DokumentenTyp, ref Sichtbar);  

und es funktioniert 🙂

meine frage an euch, wie kann ich meine Textmarke mit inhalt füllen?
bzw. wie kann ich auf meine vordefinierten texmarken zugreifen?

vielen dank
A mann

624 Beiträge seit 2006
vor 16 Jahren

mit einem reader holst du dir die werte die in der datenbank sind


  OleDbDataReader thisReader = sql_mahnung1.ExecuteReader();

                    while (thisReader.Read())
                    {
                        string name= thisReader.GetValue(1).ToString();
                        string vorname = thisReader.GetValue(2).ToString();
                        string adresse= thisReader.GetValue(3).ToString();
                        string telefonnr = thisReader.GetValue(4).ToString();
...

danach füllst du in einer anderen schleife die platzhalter aus mit den werten die du mit dem reader geholt hast


foreach (Word.Field myMergeField in oWordDoc.Fields)
                        {
                            Word.Range rngFieldCode = myMergeField.Code;
                            String fieldText = rngFieldCode.Text;
                            if (fieldText.StartsWith(" MERGEFIELD"))
                            {

                                Int32 fieldNameLength = fieldText.Length;
                                Int32 length = fieldNameLength - 11;
                                string fieldName = fieldText.Substring(11, length);
                                fieldName = fieldName.Trim();

                                if (fieldName == "name")
                                {
                                    myMergeField.Select();
                                    oWord.Selection.TypeText(name);

                                }

                                if (fieldName == "vorname")
                                {
                                    myMergeField.Select();
                                    oWord.Selection.TypeText(vorname);
                                }

usw.