Worddokument speichern



  • Hallo,

    aus meiner Anwendung heraus werden Daten an Word übergeben.
    Nun soll das Word-Dokument auch gleich gespeichert werden.

    Allerdings erhalte ich immer folgende Fehlermeldung, wobei ich diese nicht ganz verstehe, da noch kein Dokument mit diesem Namen in diesem Verzeichnis ist.
    Kann mir bitte jemand helfen, wie ich das Dokument speichern kann?

    Eine Datei kann nicht unter dem gleichen Namen wie eine bereits geöffnete Datei gespeichert werden. Geben Sie einen anderen Namen für das Dokument ein.

    Hier der Code:

    public void Export()
            {
                oWord = null;
                Word.Documents oDocs = null;
                Word.Document oDoc = null;
                Word.Bookmarks oBookmarks = null;
                object missing = System.Reflection.Missing.Value;
    
                // Get word instance.
                ExportData.GetWordInstance(ref oWord);
                if (oWord != null)
                {
                    try
                    {
                        // ...
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Fehler\n" + ex.InnerException.Message, "Word Export", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    finally
                    {
                        oDoc.Activate();
                        oWord.Visible = showWord;
    
                        object fileName = @"C:\Temp\test.doc";
    
                        oDoc.SaveAs(ref fileName,
                        ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing);    
                    }
                }
            }
    


  • Ich habe den Speichern Vorgang nochmlas separat geprüft und festgestellt, dass es sich dabei um folgenden Fehlercode handelt:

    base {System.SystemException} = {"Typkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"}

    Jemand eine Idee?? 😕



  • Nun habe ich es zwar geschafft "irgendwie" zu speichern, jedoch immer noch nicht wie ich mir das vorstelle.

    Versucht habe ich es über den SaveFileDialog, jedoch wird dieser immer wieder aufgerufen, egal ob ich schon gespeichert habe oder nicht.

    Nun aber mein größeres Problem:
    Zunächst öffne ich ja eine Vorlage, diese wird dann automatisch befüllt.
    Und ich gehe eigentlich davon aus, dass es sich dabei um

    oDoc
    

    handelt.
    Wird nun aber über den SaveDialog oDoc gespeichert, so handelt es dabei nur um die Daten, die auch in der Vorlage drin sind, nicht aber die Daten, die eigentlich übertagen wurden?!?! 😕

    Ich stehe echt auf dem Schlauch und hoffe, dass mir jemand helfen kann!!!



  • Den letzten Beitrag versteh ich jetzt überhaupt nicht. Was sollte oDoc sein und was sind nur die Daten? Kannst du das irgendwie konkreter beschreiben?



  • public void Export()
            {
                oWord = null;
                Word.Documents oDocs = null;
                Word.Document oDoc = null;
                Word.Bookmarks oBookmarks = null;
                object missing = System.Reflection.Missing.Value;
     ....
    

    oDoc ist das Dokument.

    Ich öffne eine Vorlage, diese enthält Textmarken welche befüllt werden.
    Speichere ich nun oDoc mit dem SaveFileDialog, so wird nur die Vorlage mit den Textmarken gespeichert, nicht aber das Dokument mit den befüllten Textmarken.
    Ich hoffe, nun ist es verständlicher?!



  • Und wie befüllst du das Dokument? Wie machst du die Vorlage auf?

    Ich kenne mich mit der Word API nicht explizit aus. Grundsätzlich würd ich mal zu allen Funktionen, die du aufrufst erstmal genauer die Doku durchschauen. Oft findet man ziemlich schnell den entscheidenden Hinweis.



  • Hier mal noch mehr Code. Hier kann man sehen wie die Vorlage geöffnet wird und die Textmarken befüllt werden.

    public void ExportBestellung(string filename, string name, string value)
            {
                //Word.Application oWord = null;
                oWord = null;
                Word.Documents oDocs = null;
                Word.Document oDoc = null;
                Word.Bookmarks oBookmarks = null;
                object missing = System.Reflection.Missing.Value;
    
                // Get word instance.
                ExportData.GetWordInstance(ref oWord);
    
                if (oWord != null)
                {
                    try
                    {
                        oDocs = oWord.Documents;
                        // Open document.
                        object fileName = DirectoryFiles.OpenFile(filename);  // Vorlage öffnen: d:\vorlagen\bestellung.doc
                        object readOnly = false;
                        object isVisible = true;
                        object oMissing = Type.Missing;
                        oDoc = oDocs.Open(ref fileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                            ref oMissing, ref oMissing, ref oMissing);
    
                        oBookmarks = oDoc.Bookmarks;
    
                        if (name == "bmTableData")
                        {
    						//...
    						// Textmarken in Tabelle einfügen.
    						// ...
    					}
    					 else
                        {
    						// sonstige Textmarken einfügen.
                            InsertTextAtBookmark(ref oBookmarks, name, value, zeilenumbruch);
                        }
    				}
    				  }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Der Export wurde abgebrochen\n" + ex.InnerException.Message, "Word Export", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    finally
                    {
                        oDoc.Activate();
                        oWord.Visible = showWord;
    
                        string fileNameTemplate = @"C:\Temp\test.doc";
                        string outputFileName = string.Format(fileNameTemplate, DateTime.Now.ToString("MM-dd-yy"));
    					oDoc.SaveAs(outputFileName);
    				}
    		}
    


  • Der dritte Parameter von der Documents.Open Methode ist z.B. ReadOnly. Setz das mal explizit auf false, keine Ahnung, was der Default Wert ist.



  • Der dritte Parameter von der Documents.Open Methode ist z.B. ReadOnly. Setz das mal explizit auf false, keine Ahnung, was der Default Wert ist.

    Hat leider nichts gebracht ... 😞 😞



  • Hier scheinen sich nicht viele rumzutreiben, die sich mit der Office API auskennen. Eigentlich auch nicht so verwunderlich in einem C++ Forum. Vielleicht solltest du das eher in einem spezialisierteren Forum versuchen.



  • Wenn Validierung und Abspeichern ueber erfolgen soll, musst Du die IPC auch handlen. Die API mit try/catch einfach anzusteuern wird ohne COM+ wohl nicht funktionieren. Siehe:

    Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH
    

    Warum speicherst Du nicht direkt das File?
    Am besten über
    http://de.wikipedia.org/wiki/WordprocessingML
    Nacht man bereits seit 2003 so. 😉


Log in to reply