tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
2935
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von teppi
    teppi teppi ist offline Mitglied Platin
    Registriert seit
    May 2004
    Ort
    Berlin
    Beiträge
    537
    Hallo!

    Ich hab nun schon alle vorgeschlagenen Methoden durchprobiert, die ich so im Netz finden konnte. Aber ich kriege es einfach nicht hin, zur Laufzeit meines Programms den Excelprozess korrekt zu beenden. Ich erstelle eine Excelobjekt, ein Workbookobjekt und ein Worksheetobjekt. Ich setze alles null und benutze auch diese Marshal.ReleaseComObject() .. Aber es hilfts nichts. Ich bin echt am Ende mit meinem Latein ... Hilfe !

    Vielen Dank im voraus,
    Gruß Stefan

    PHP-Code:
    using System;
    using System.Data;
    using Excel;
    using System.Runtime.InteropServices;

    namespace 
    WindowsApplication10
    {
        
    /// <summary>
        /// Parserklasse um Daten aus einem vorher ausgewählten Exceldokument zu extrahieren
        /// </summary>
        
    public class ExcelWriter
        
    {
            private 
    Excel.Workbook wb null;
            private 
    Excel.Worksheet ws null;
            private 
    System.Data.DataTable daten null;
            private 
    string fileName "";
            private 
    Excel.Application app null;

            public 
    ExcelWriter(string inFileNameSystem.Data.DataTable inDaten)
            {
                
    //
                // TODO: Add constructor logic here
                //
                
    this.fileName inFileName;

                
    this.daten inDaten;
                
                
    app = new Excel.ApplicationClass();
                
                
    this.wb app.Workbooks.Add(Type.Missing);

                
    this.wb.Application.DisplayAlerts false;

                
    this.createXSL();
            }
            
            private 
    void createXSL(){
                
                
    // neues Datenblatt mit Ordnernamen anlegen
                
    ws = (Excel.Worksheet)wb.Worksheets.Add(Type.MissingType.MissingType.MissingType.Missing);
                                                
                
    // Neuen Kopf erstellen    
                
    ws.Cells[1,1] = "Ordnerstruktur";
                
    ws.Cells[1,2] = "Req-ID";
                
    ws.Cells[1,3] = "Akzeptanztest";
                
    ws.Cells[1,4] = "ARD";
                
    ws.Cells[1,5] = "ARD Version";
                
    ws.Cells[1,6] = "Links-FDB";
                
    ws.Cells[1,7] = "Feature Complete";
                
    ws.Cells[1,8] = "PQ-EU";
                
    ws.Cells[1,9] = "TO-EU";
                
    ws.Cells[1,10] = "PQ-NAR";
                
    ws.Cells[1,11] = "TO-NAR";
                
    ws.Cells[1,12] = "PQ-JPN";
                
    ws.Cells[1,13] = "TO-JPN";
                
    ws.Cells[1,14] = "PQ-CHN";
                
    ws.Cells[1,15] = "TO-CHN";
                
    ws.Cells[1,16] = "Description";
                
    ws.Cells[1,17] = "Test Name";
                
    ws.Cells[1,18] = "Designer";
                
    ws.Cells[1,19] = "Creation Date";
                
    ws.Cells[1,20] = "Status";
                
    ws.Cells[1,21] = "Stepname";
                
    ws.Cells[1,22] = "Description";

                
    //Alle Zeilen der DataTable durchlaufen und Exceldatei füllen

                
    int index 2;

                foreach (
    DataRow row in daten.Rows)
                {
                    
    ws.Cells[index,2]= row[1];
                    
    ws.Cells[index,3] = row[2];
                    
    ws.Cells[index,4] = row[3];
                    
    ws.Cells[index,5] = row[4];
                    
    ws.Cells[index,6] = row[5];
                    
    ws.Cells[index,7] = row[6];
                    
    ws.Cells[index,8] = row[7];
                    
    ws.Cells[index,9] = row[8];
                    
    ws.Cells[index,10] = row[9];
                    
    ws.Cells[index,11] = row[10];
                    
    ws.Cells[index,12] = row[11];
                    
    ws.Cells[index,13] = row[12];
                    
    ws.Cells[index,14] = row[13];
                    
    ws.Cells[index,15] = row[14];
                    
    ws.Cells[index,16] = row[15];
                    
    ws.Cells[index,17] = row[16];
                    
    ws.Cells[index,18] = row[17];
                    
    ws.Cells[index,19] = row[18];
                    
    ws.Cells[index,20] = row[19];
                    
    ws.Cells[index,21] = row[20];
                    
    ws.Cells[index,22] = row[21];

                    
    index++;
                }

                
    wb.SaveAs("c:\\bla.xls"
                    
    Excel.XlFileFormat.xlExcel7
                    
    Type.MissingType.MissingType.MissingType.Missing
                    
    Excel.XlSaveAsAccessMode.xlNoChangeType.Missing
                    
    Type.MissingType.MissingType.Missing);
        

                
    wb.Close(Type.Missing,Type.Missing,Type.Missing);

                
    wb null;
                
    ws null;
                
                
    app.Quit();        
        
                
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
        
                
    app null;

                
    System.GC.Collect();        
                
    System.GC.WaitForPendingFinalizers();
                
    System.GC.Collect();        
            }
        }

     
    :-) möp

  2. #2
    MFC openGL MFC openGL ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    483
    http://www.tutorials.de/forum/net-ap...t=word+interop

    4. Post

    Gilt für alle Office Anwendungen...

    Gruss

    MFC OpenGL
     
    Sprache : C/C++/C# & MFC
    Compiler : MSVC++ 7 / VS2003.net
    OS : Windows XP/2k

  3. #3
    Avatar von teppi
    teppi teppi ist offline Mitglied Platin
    Registriert seit
    May 2004
    Ort
    Berlin
    Beiträge
    537
    Naja .. da steht nix Neues für mich. Wie gesagt ich entferne schon die Excel Applikation mittels:

    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

    Aber der Prozess läuft trotzdem noch. Ich scheine etwas vergessen zu haben. Ich weiß nur nicht was.

    Danke trotzdem ..
     
    :-) möp

  4. #4
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Eventuell das WorkSheet vor dem WorkBook vernichten. Und dann solltest den GC auch nicht unbedingt manuell aufrufen. Der weiß schon wann er soll.
     

  5. #5
    Avatar von teppi
    teppi teppi ist offline Mitglied Platin
    Registriert seit
    May 2004
    Ort
    Berlin
    Beiträge
    537
    Ok .. ich probier das morgen, wenn ich wieder auf Arbeit bin.

    Vielen Dank so weit. Obwohl mir schon schwant, dass es nix hilft ..
     
    :-) möp

Ähnliche Themen

  1. Excel Uhrzeit gesteuert beenden
    Von Bitbull im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 15.03.10, 11:12
  2. COM InProc Server richtig beenden
    Von RuFFnEcK im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 30.10.06, 11:03
  3. Programm richtig beenden und nicht killen
    Von The_Rave im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 04.06.06, 16:09
  4. [Excel] Programm beenden ohne Abfrage zum Speichern
    Von Meca im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 14.02.05, 19:52
  5. Richtig Beenden
    Von Kyrodust im Forum Visual Basic 6.0
    Antworten: 11
    Letzter Beitrag: 05.09.03, 08:18