none
Word in eigener Klasse öffnen und an Form zur weiteren Bearbeitung übergeben RRS feed

  • Frage

  • Hallo Forum,

    ich habe mir eine Klasse gemacht, in der ich ein Word Dokument öffne und bestimmte Tetxt bearbeite.

    Nun möchte ich das Word Doc an die aufrufende Form wieder übergeben um es dort weiter zu bearbeiten odes es an eine

    weitere Funktion in der Klasse übergeben.

    Ich möchte das wenn irgend möglich machen, ohne das ich das Doc immer irgendwo speichern und wieder öffnen muss.

    Hat mir da jemand einen Hinweis ?


    Gruß Roland

    Freitag, 29. November 2013 12:35

Antworten

  • Du instanzierst hier die Application- und die Document-Instanz. Wenn du ohne Speichern diese Daten weiter bearbeiten willst, dann musst du diese an deine Form weiter geben bevor du sie schließt.

    Nachfolgend nochmal eine Beispielklasse, wie du es machen könntest:

    class MyWordEditor
    {
        /// <summary>Ruft ddie Word-Instanz ab.</summary>
        public Microsoft.Office.Interop.Word.Application WordApp { get; private set; }
        /// <summary>Ruft das Worddokument ab.</summary>
        public Microsoft.Office.Interop.Word.Document Document { get; private set; }

        public object Missing = System.Reflection.Missing.Value;

        /// <summary>Öffnet eine Word-Datei zum bearbeiten.</summary>
        public void OpenFile(string fileName)
        {

            WordApp = new Microsoft.Office.Interop.Word.Application();
            object file = fileName;
            Document = WordApp.Documents.Open(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);

            WordApp.Visible = true;
            WordApp.Activate();

            //Weitere Standardänderungen
        }
        /// <summary>Schließt eine Word-Datei.</summary>
        public void Close()
        {
            object savechanges = true;
            Document.Close(ref savechanges, ref Missing, ref Missing);
            WordApp.Quit(ref savechanges, ref Missing, ref Missing);
        }
    }
    Der Aufruf könnte dann so aussehen:
    MyWordEditor editor = new MyWordEditor();
    editor.OpenFile("Meine Datei");//Datei öffnen
    editor.Document.Paragraphs.Add(ref editor.Missing);//Datei ändern
    editor.Close();//Datei schließen
    So könnte ich mir das zumindest vorstellen.

    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Roland DE Montag, 2. Dezember 2013 08:53
    Freitag, 29. November 2013 15:05
    Moderator

Alle Antworten

  • Hallo,
    je nachdem mit was genau du das Word-Dokument bearbeitest, müsstest du eine Instanz des Dopkuments haben. Über InterOp könnte das beispielsweise die Instanz der ApplicationClass-Klasse weiter reichen.

    Eventuell kannst du es auch so bauen, das du die jeweilige Instanz einfach von einer Methode zurück gibst oder als Eigenschaft der Klasse anlegst.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 29. November 2013 14:13
    Moderator
  • Hallo Tom,

    Sorry das hab ich nicht ganz verstanden.

    ich mache in der Class das Dokument so auf und auch wieder zu. Das zu möchte ich nicht mehr machen sondern wie beschrieben in der Form weiterbearbeiten

    using System.Runtime.InteropServices;
    using Word = Microsoft.Office.Interop.Word;
    


    object missing = System.Reflection.Missing.Value;
                object file = "C:\\temp\\TestDokument.docx";
    
                Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
    
                Microsoft.Office.Interop.Word.Document aDoc = WordApp.Documents.Open(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);
    
    
                WordApp.Visible = true;
                WordApp.Activate();
    
    .
    .
    ...
    
    
    object savechanges = true;
    
                aDoc.Close(ref savechanges, ref missing, ref missing);
    
                WordApp.Quit(ref savechanges, ref missing, ref missing);
    
    

    wie kann ich jetzt das aDoc an meine Form übergeben und wie muss ich dort den word Aufruf machen um es weiter bearbeiten zu können.


    Gruß Roland

    Freitag, 29. November 2013 14:46
  • Du instanzierst hier die Application- und die Document-Instanz. Wenn du ohne Speichern diese Daten weiter bearbeiten willst, dann musst du diese an deine Form weiter geben bevor du sie schließt.

    Nachfolgend nochmal eine Beispielklasse, wie du es machen könntest:

    class MyWordEditor
    {
        /// <summary>Ruft ddie Word-Instanz ab.</summary>
        public Microsoft.Office.Interop.Word.Application WordApp { get; private set; }
        /// <summary>Ruft das Worddokument ab.</summary>
        public Microsoft.Office.Interop.Word.Document Document { get; private set; }

        public object Missing = System.Reflection.Missing.Value;

        /// <summary>Öffnet eine Word-Datei zum bearbeiten.</summary>
        public void OpenFile(string fileName)
        {

            WordApp = new Microsoft.Office.Interop.Word.Application();
            object file = fileName;
            Document = WordApp.Documents.Open(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);

            WordApp.Visible = true;
            WordApp.Activate();

            //Weitere Standardänderungen
        }
        /// <summary>Schließt eine Word-Datei.</summary>
        public void Close()
        {
            object savechanges = true;
            Document.Close(ref savechanges, ref Missing, ref Missing);
            WordApp.Quit(ref savechanges, ref Missing, ref Missing);
        }
    }
    Der Aufruf könnte dann so aussehen:
    MyWordEditor editor = new MyWordEditor();
    editor.OpenFile("Meine Datei");//Datei öffnen
    editor.Document.Paragraphs.Add(ref editor.Missing);//Datei ändern
    editor.Close();//Datei schließen
    So könnte ich mir das zumindest vorstellen.

    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Roland DE Montag, 2. Dezember 2013 08:53
    Freitag, 29. November 2013 15:05
    Moderator
  • Hallo Tom,

    Danke :-)


    Gruß Roland

    Montag, 2. Dezember 2013 08:53