Problem mit process.start



  • // Excel-Interopmarionette
    		// Projekktverweis auf "Microsoft Excel 10.0 Object Library" machen
    		// using-Klausel machen
    		// using DasExcel = Excel;
    		// da man sonst zumindest bei mir Mehrdeutigkeitsverweis bekommt auf 'Application'
    		// ich benutz .NET 1.1
    		private DasExcel.Application excelApp = null;
    		private void ExcelInteropRemote()
    		{
    
    			// Versuch eine vielleicht schon laufende Excel-Instanz zur Marionette zu machen
    			// bedarf Verweis auf Excel-COM-Library und eines using aber nur so bei mir in .NET 1.1
    			// using DasExcel = Excel; // ansonsten wird Application ein mehrdeutiger Verweis
    			try
    			{
    				object oApp = Marshal.GetActiveObject("Excel.Application");
    				excelApp = (Excel.Application) oApp;
    			}
    			catch{}
    
    			if(excelApp == null) // kein laufendes Excel gefunden
    			{
    				// Marionette selbst aufmachen
    				excelApp = new Excel.ApplicationClass();
    				excelApp.Visible = true;
    			}
    		}
    

    barauchst jetzt nurnoch im Load deiner Form oder Ctor
    son Aufruf zu tun

    ExcelInteropRemote();
    


  • eine Xls-File zu öffnen geschied dann über die Methode _Open

    gesetzt dem Fall deine ExcelApplikationsVariable lautet so wie in meier Methode
    in der vorherigen Antwort von mir kommt bei dir
    dann im ListBox-Click so was:

    if(excelApp != null)
    excelApp.Application.Workbooks._Open(listBox.items[listbox1.SelectedIndex].ToString(),.....);
    

    So jetzt will ich aber mal an meinem eigene Kram weiterbasteln



  • Hier das sollte noch aufschlussreicher fuer Dich sein

    // Excel-Interopmarionette
    		// Projekktverweis auf "Microsoft Excel 10.0 Object Library" machen
    		// using-Klausel machen
    		// using DasExcel = Excel;
    		// da man sonst zumindest bei mir Mehrdeutigkeitsverweis bekommt auf 'Application'
    		// ich benutz .NET 1.1
    		DasExcel.Application excelApp = null;
    		private void ExcelInteropRemote()
    		{
    
    			// Versuch eine vielleicht schon laufende Excel-Instanz zur Marionette zu machen
    			// bedarf Verweis auf Excel-COM-Library und eines using aber nur so bei mir in .NET 1.1
    			// using DasExcel = Excel; // ansonsten wird Application ein mehrdeutiger Verweis
    			try
    			{
    				object oApp = Marshal.GetActiveObject("Excel.Application");
    				excelApp = (Excel.Application) oApp;
    				excelApp.Visible = true;
    			}
    			catch
    			{
    				// Marionette selbst aufmachen
    				excelApp = new Excel.ApplicationClass();
    				excelApp.Visible = true;
    			}
    
    		}
    
    		private void button2_Click(object sender, System.EventArgs e)
    		{
    			// "Missing.Value" durch using System.Reflection;
    			if(excelApp != null)
    			{
    				excelApp.Application.Workbooks._Open("c:\\Mappe1.xls", 
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value,
    					Missing.Value);
    			}
    		}
    
    		private void button1_Click(object sender, System.EventArgs e)
    		{
    			if(excelApp != null)
    				excelApp.Application.Quit();
    
    		}
    

    So jetzt aber wirklich muss an meinem interessanten Kram auch noch vorankommen

    Gruss sclearscreen

    P.S.: Unter den Parametern die ich mit Mising.Value maskiert habe
    sind noch andere z.b. fuer verschlüsselte/Passwortgeschüzte Excel-Dateien.
    Aber das führt jetzt vom 100 in 10000000....
    Und etwas Forschergeist will ich noch übrig lassen



  • Danke für deine Hilfe!
    Starten und Datei laden funktioniert jetzt wunderbar ohne Probleme!
    Ich habe allerdings noch nicht rausgefunden, wie man auf eine Tabelle zugreifen kann um z.b. ein diagramm zu zeichnen.
    Das Einzige was ich gefunden habe sind Beispielprogramme, die Zellen kopieren, aber da komme ich leider nicht weiter 😞



  • hmm Du brachst ein Objekt namens

    Excel.Workbook das wiederum hat die Eigenschaft Charts

    darüber ist es dann möglich Diagramme in einer Excelmappe zu zeichnen.

    Beispiel ist allerdings VB.NET ein Problem das in C# zu machen sollte nicht bestehen da es auf der gleichen Library/Framwork besteht. Sind Aufrufe,Eigenschaften Methoden und Objekte gleichen Namens.

    Beispiel in VB.NET



  • Zum Prob Zellen ansprechen habe ich auf Codeproject diesen
    Schnippel gefunden

    /// <summary>
        /// Vahe Karamian - 03/22/2005 - Get Range from Worksheet
        /// Return content of range from the selected range
        /// </summary>
        /// Range parameter: Example, GetRange("A1:D10")
    #region GET RANGE
        public string[] GetRange(string range)
        {
            Excel.Range workingRangeCells = excelWorksheet.get_Range(range,Type.Missing);
            //workingRangeCells.Select();
            System.Array array = (System.Array)workingRangeCells.Cells.Value2;
            string[] arrayS = this.ConvertToStringArray(array);
    
            return arrayS;
        }
    #endregion
    


  • Ich empfehle hier wirklich das Du mal auf
    Codeproject vorbeischaust
    in dem Bereich gibts dort die geballte Ladung.

    Dieses MyCSharp hat auch einigen Fundus darüber.

    Sowie hier Treffer in der MSDN.

    Ansonsten mal gucken schreib wieder hierein falls es weitere Fragen gibt.
    Ich schaue ja immer mal herein.

    Als Artikelschreiber muss ich mich als Autor um meinen neuen Beitrag hier noch kümmern (ein Vergleich: SharpDevelop 1.1 versus VS.NET 2003).

    Grüsse sclearscreen



  • Mach Dir wieder ein 2 Projekt auf wo Du das was Du ernst umsetzen möchtes wieder testen tust. Dann musste nicht dort rumfrickeln wo das was Du bis jetzt hast schon funktioniert.



  • Zellen selektieren und kopieren (ein Beispiel bei MSDN) funktioniert auch wunderbar.
    Nur habe ich nichts gefunden, wie man diese zellen in einem Diagramm darstellt.
    Ich habe schon ein VBA Makro wo alle Befehle zum Diagrammformatieren drinnstehen, aber ich habe einfach keine Ahnung wo ich diese in C# hinschreiben kann / muss um ein Diagramm zu zeichnen.



  • funktioniert über Excel.Workbook - Typ

    Tortendiagramm mit VB.NET

    Alles über Excel mit .NET per VB

    Themen dazu in den Google User-Groups

    alles aus den tiefen des Netz ich betone nochmals lässt sich alles in C# umdichten weil es alles auf dem NET-Framework rennt.

    Jup bei der Gelegenheit konnte ich gleich mein Suchmaschinenfrontend schön testen, die automatische URLverweisgenerierung in die Zwischenablage funktioniert toll! 🙂

    Gruss sclearscreen

    P.S.: die erste Variante unter den Links ist sehr vielversprechent

    PseudoCodemässig würde ich so vorgehen.

    1. Zellen des Excel-Sheet auslesen dessen Daten Du im Diagramm brauchst
    (über Zellen auslesen bist Du Dir ja im Klaren)
    2. Diese Daten in einer geigneten Datenstruktur sichern im C#-Programm
    3. Neue Workbook-Instanz erzeugen. Diese Instanz bietet die Eigenschaft Charts
    das ist der wunde/interessant Ansatzpunkt um eben Diagramme zu generieren.
    4. Diagramm erzeugen.
    5. Workbook-Instanz die Ihrerseits die Charts hat an aktuelle Arbeitsmappe wie
    auch immer anhängen.



  • Wie schon mehrmals:
    Vielen Dank!
    Ich hoffe, das ich zurechtkomme!



  • jo und bei Probs einfach was posten.

    Also den hau rein

    Gruss sclearscreen


Anmelden zum Antworten