Laden...

Forenbeiträge von BeZi Ingesamt 153 Beiträge

05.03.2010 - 20:56 Uhr

Ich bräuchte die Kalendereintrge vom Exchange

02.03.2010 - 21:56 Uhr

Nabend, habe eine kurze frage.

hat jemand von Euch schoneinmal die Termine eine Accounts ausgelesen ?

Gibt es Beispiele bzw. Vorschläge ? Finde leider nichts passendes.

Merci

26.02.2010 - 08:39 Uhr

HALLO ganz einfach, 64 bit braucht kein Mensch immer das 64 Bit gehabe, stelle dein Projekt um auf 32 Bit unter Projekt --> Erstellen --> von AnyCPU auf 32 Bit (x86). Dann gehts (haste aber nicht bei express)

26.02.2010 - 08:30 Uhr

Moin,

habe folgende frage und suche nach einer Lösung. Leider ist mein Verständnis was die Verbindung zwischen Dataset und Datagridview noch nicht 100%.

Ich fang am besten mal an.

Ich kann ein Datagridview direkt mit einem Dataset verbinden. Das ist ja ansicht kein Problem.

Ich will aber etwas anderes machen. Ich habe ein Datagridview indem ich einen kompletten Monat abbilde. Also 01.01.2010 bis 31.01.2010 sprich 31 Zeilen. Ich kann über einen Button innerhalb des Datagridviews neue Zeilen hinzufügen bzw. entfernen.

Meine Frage ist, wie binde ich das Dataset an mein Vorgefertigtes Datagridview an ?
Wenn ich es direkt anbinde zeigt er mir ja nur die Spalten an die im Januar liegen. aber nicht die Tag wo nichts eingetragen ist. Es sind 2 spalten a = Datum und b = werte im DGV. Ich will das er mir auch nur werte später speichert wenn in b was steht. bzw Daten nur anzeigt wenn in b was steht. (Oh man..., ich hoffe ich habe mich verständlich ausgedrückt)

Muss ich mein Dataset in ein Datatable aufteilen und die Daten (Datumwerte) vergleichen mit den Datumswerten im Datagridview (z.B foreach oder for- Schleife). Wie passiert es dann das er neue Daten in das Dataset übernimmt (auch foreach oder for-schleife) und klappt das dann einwandfrei mit dem updaten des Datasets mit der Datenbank ???

Also ich bedanke mich mal im Voraus. Das ich c# benutze muss ich wohl nicht erwähnen (ha zu spät...), Merci mal für eure konstruktiven Vorschläge...

BeZi

21.02.2010 - 13:56 Uhr

jo merci das passt

21.02.2010 - 13:29 Uhr

OK textchange event bekomme ich leider nicht hin jemand eine lösung ???



private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            TextBox tb = e.Control as TextBox;

            if (tb != null)
            {
                tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);

                tb.TextChanged +=new EventHandler(tb_TextChanged);
            }
            
        }

        void tb_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ("1234567890.\b".IndexOf(e.KeyChar.ToString()) < 0)
            {
                e.Handled = true;
            }
        }

        void tb_TextChanged(object sender, EventArgs e)
        {
???????
        }

21.02.2010 - 11:47 Uhr

@rongchaua Das Beispiel stammt aus dem Buch Datenbank-Programmierung mit Visual C# (2008).

Ehrlich gesagt weiss ich auch nicht ob es dir gestattet ist Code hier zu posten der nicht von dir stammt (ist minimal abgeändert, wenn überhaupt...)

Event DataError selbst zu implementieren (abzuschalten war falsch ausgedrückt) und ist nicht die Lösung des Problems. nadem ich suche. Irgend jemand muss etwas ähnliches doch schon einmal implementiert haben.

21.02.2010 - 08:58 Uhr

keiner der mir helfen kann ??
Dataerror abzuschalten bzw. den code dort einzubauen ist ja wohl falsch.

18.02.2010 - 16:59 Uhr

sorry jungs gibts dazu ein kleines Beispiel, komme leider nicht weiter

17.02.2010 - 19:59 Uhr

Wieso Textbox ?? Ich gebe die Daten direkt in der Zelle des DataGridViews an.

17.02.2010 - 19:43 Uhr

Moin moin,

habe folgendes Problem,

ich fülle eine Datagridview mit einem DataSet, Das sit ansich kein Problem.

this.datagridview1.DataSource = dataset....

Das funzt alles.

Ich habe aber eine Spalte mit Datum, das ist ansich auch kein Problem. Wenn ich jetzt aber während der Laufzeit ein Datum eingebe und es ist kein gültiges dann bekomme ich eine Fehlermeldung:


---------------------------
Standard-Fehlerdialogfeld für DataGridView
---------------------------
DataGridView-Ausnahme:



System.FormatException: Die Zeichenfolge wurde nicht als gültiges DateTime erkannt. ---> System.FormatException: Die Zeichenfolge wurde nicht als gültiges DateTime erkannt.

   bei System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)

   bei System.DateTime.Parse(String s, IFormatProvider provider)

   --- Ende der internen Ausnahmestapelüberwachung ---

   bei System.Windows.Forms.Formatter.InvokeStringParseMethod(Object value, Type targetType, IFormatProvider formatInfo)

   bei System.Windows.Forms.Formatter.ParseObjectInternal(Object value, Type targetType, Type sourceType, TypeConverter targetConverter, TypeConverter sourceConverter, IFormatProvider formatInfo, Object formattedNullValue)

   bei System.Windows.Forms.Formatter.ParseObject(Object value, Type targetType, Type sourceType, TypeConverter targetConverter, TypeConverter sourceConverter, IFormatProvider formatInfo, Object formattedNullValue, Object dataSourceNullValue)

   bei System.Windows.Forms.DataGridViewCell.ParseFormattedValueInternal(Type valueType, Object formattedValue, DataGridViewCellStyle cellStyle, TypeConverter formattedValueTypeConverter, TypeConverter valueTypeConverter)

   bei System.Windows.Forms.DataGridViewCell.ParseFormattedValue(Object formattedValue, DataGridViewCellStyle cellStyle, TypeConverter formattedValueTypeConverter, TypeConverter valueTypeConverter)

   bei System.Windows.Forms.DataGridView.PushFormattedValue(DataGridViewCell& dataGridViewCurrentCell, Object formattedValue, Exception& exception)



Behandeln Sie das DataError-Ereignis, um dieses Standarddialogfeld zu ersetzen.
---------------------------
OK   
---------------------------

Ich hatte eigentlich vor das der Nutzer nur den Tag des Datum eingeben muss und das Datum verfollständigt sich dann. (E.G. 11 --> 11.02.2010)

Mit dataGridView_CellValueChanged kann ich es leider nicht (mehr) umsetzen, da die Exception früher kommt.

Kann mir jemand den Eventhandler sagen den ich umsetzen muss um das Datum doch wie im obrigen Beispiel umzusetzen ???

Merci im Voraus

03.02.2010 - 20:13 Uhr

N'abend

Ich suche eine Möglichkeit eine komplette PDF Seite als Bild zu speichern. Gibt es eine freie DLL (wie itextsharp) die mir die Möglichkeit bietet ? Ich finde nur teure Progs bzw. libaries.

Merci im Voraus

26.10.2009 - 11:09 Uhr

Ok, ich hoffe ich habe eine passende Lösung:

ich rufe den GC auf


            System.GC.Collect();

danach geht es, also passt

26.10.2009 - 10:56 Uhr

Moin, ich habe folgendes Problem

Ich schreibe in eine Excel-Datei Daten mittels OLEDB (danke mal an Rainbird)

hier der Code:


private static string BuidExcelConnectionString(string fileName)
        {
            return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0";
        }

        public void fill_excel_sheet(string fileName)
        {
            DataTable table = mytable;

            string connectionString = BuidExcelConnectionString(fileName);

            OleDbConnection connection = new OleDbConnection(connectionString);
            connection.Open();

            StringBuilder parameterBuilder = new StringBuilder(") VALUES (");

            int columnCount = table.Columns.Count;

            StringBuilder builder = new StringBuilder("INSERT INTO [");
            builder.Append(table.TableName);
            builder.Append("$] (");

            for (int i = 0; i < columnCount; i++)
            {
                builder.Append(table.Columns[i].ColumnName);

                parameterBuilder.Append("?");

                if (i < (columnCount - 1))
                {
                    builder.Append(",");
                    parameterBuilder.Append(",");
                }
            }
            builder.Append(parameterBuilder.ToString());
            builder.Append(")");
            string insertStatement = builder.ToString();

            foreach (DataRow row in table.Rows)
            {
                OleDbCommand command = new OleDbCommand(insertStatement, connection);
                foreach (DataColumn column in table.Columns)
                {
                    command.Parameters.Add(new OleDbParameter(column.ColumnName, row[column]));
                }
                command.ExecuteNonQuery();
                command = null;
            }

            connection.Close();

            table = null;
            connectionString = null;
            connection = null;
            builder = null;
            parameterBuilder = null;
        }

Das Problem ist, ich kann das Excel erst öffnen wenn ich das Programm geschlossen habe. Um genau zu sein befüllt sich die Excel Datei erst wenn das Programm geschlossen wird. (sieht man an der Dateigrösse).

Jemand eine Ahnung warum bzw. wie ich das verhindere ?

Mfg

BeZi

30.08.2009 - 22:07 Uhr

Hast du etwas zu Shadow Copying ? Links ?

30.08.2009 - 21:58 Uhr

Also ich habe eine Windows Form Anwendung in der lade ich alles als dll. der Vorteil besteht darin das das Programm zum Programmstart ein automatisches update ausführt (lesen von dll dateien und gegebenenfalls austauschen). (Updatefähigkeit). Die dll die ich meine wird als nächstes geladen und dient der User Anmeldung. Wenn nun der User seine Anmeldung durchgeführt hat, soll ein Flag übergeben werden ob das Hauptprogramm beendet wird oder nicht(Anmeldung IO oder nicht)

Ich habe eine Lösung, wobei diese jedoch mehr als fragwürdig ist (auch wenn diese Gut funtioniert.) Ein Timer startet beim laden der dll, alle 1/2 Sekunde fragt er nach ob die dll noch sichtbar ist. Ist sie es nicht frage hole ich die Daten mittels:


        private void timer1_Tick(object sender, EventArgs e)
        {
            if (usCntl.Visible == false)
            {
                timer1.Stop();

                try
                {
                    MethodInfo mi = t.GetMethod("anmeldung_status");
                    int a = (int)mi.Invoke(myobjekt, new object[] {} );
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\n\n" + ex.InnerException, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
}

30.08.2009 - 21:17 Uhr

Nabend habe folgende frage,

ich habe eine Windows Forms Steuerelemtbibliothek. Diese lade ich nach dem Programmstart zur Laufzeit (Late Binding). In dieser dll macht der User ein paar Angaben.

Mein Problem ist jetzt folgendes. Wie kann ich eingegebene Daten von dieser dll an das Hauptprogramm übergeben? Gibt es da eine elegante Lösung ?

Merci

29.08.2009 - 12:23 Uhr

verwendetes Datenbanksystem: Access

Moin,
ich habe folgendes Problem ich versuche eine Datenbank Verbindung unter 64 Bit mittels OleDb aufzubauen (das ist ja ansich nicht das Problem)

Mein Problem besteht darin das ich es versuche unter 64 Bit, leider geht das ja nicht da es nur 32 Bit Treiber gibt. Wenn ich nun auf x86 umstelle bei Zielplattform sollte es gehen. Ich erstelle aber gerade ein Windows Form STEUERBIBLIOTHEK.
(Grund sollte momentan egal sein)

So nun zu meinem Problem:

Unter 64Bit (Any CPU) lässt es sich einwandfrei im Testcontainer ausführen, bis auf die Datenbank abfrage, klar

Wenn ich es nun unter 32 Bit ausführe (X86) habe ich das Problem das der Testcontainer einfach leer ist. Das Steuerelemnt wird einfach nicht angezeigt. Keine Ahnung warum, weiß jemand eine Abhilfe ?

2 Möglichkeiten, entweder es weiss jemand wie man das Problem mit X86 umgeht oder ich verwende eine andere Möglichkeit auf Access zuzugreifen, aber wie ?

Kann jemand helfen ???

Programmiersprache: klar C#
VS 2008 Pro

06.07.2009 - 11:58 Uhr

Was wird empfohlen ? Gibt es beispiele ?

Merci

06.07.2009 - 11:43 Uhr

Habe gerade gelesen das MAPI nicht so toll sein soll

06.07.2009 - 11:39 Uhr

Moin Jungs,

ich komme gleich zu meiner Frage: Person x erält eine e-mail mit Anhang.
Die Person x soll diesen Anhang an eine andere e-mailadresse schicken --> test@plapla.de (Exchange Server 2007).

Nun soll ich ein Programm schreiben welches die e-mail automatisch entgegennimmt und den Anhang verarbeitet. Das verarbeiten des Anhangs ist kein Problem.

Ich weiss nur nicht wie ich anfangen soll, bzw. mit was ich das realisieren soll (MAPI ?)

Ich bedanke mir im Voraus

BeZi

06.05.2009 - 19:12 Uhr

Mir würde eine kleine Übersicht bzw. wie ich alles einzuordnen habe reichen.

Merci

06.05.2009 - 18:39 Uhr

Tag die Damen, Tag die Herren,

Habe eine etwas komische frage und finde irgendwie keine richtige Antwort im Netz.

Ich mach es kurz:

  1. Gibt es einen Unterschied zwischen WPF Webanwendung und WPF/E oder ist damit daselbe gemeint?

  2. Wo ist der Unterschied zwischen ASP.NET und WPF Webanwendung ? Bzw. der Unterschied zu WPF/E? Oder benutze ich WPF und ASP.NET zusammen ?

  3. Soll Silverlight WPF ersetzen, ja oder nein?

  4. Mit was baue ich denn nun eine ASP.NET Seite und bastel eine "coole" Oberfläche dazu ?

Merci im Voraus

21.04.2009 - 13:37 Uhr

erledigt anstatt eines Balken zeichne ich einfach eine Linie. Merci Skalierung der Y-Achse in 1er Schritten Y2 Achse = Labels mit dem Abstand von Y-Achse 😃

08.04.2009 - 19:03 Uhr

Moin, hat von euch schonmal jemand mit hilfe von zedgraph ein Diagram erstellt welches auf der x-Achse die Zeit angibt und in der y-Achse Text anzeigt ?

Funktioniert das überhaupt ohne weiteres mitttels zedgraph ?

Wäre cool wenn ich ein paar antworten erhalten würde

08.04.2009 - 08:16 Uhr

Erledigt, der Connecting string muss anders geschrieben wereden:

String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+m_filename+";"+"Extended Properties=" + "'Excel 8.0;;IMEX=1'";
08.04.2009 - 01:05 Uhr

Ich glaube ich muss im connectionString noch IMEX=1 anhängen dann bekomme ich aber einen ISAM Fehler, weiss jeamd wie man den umgeht ? Wie schaut es aus auf rechnern wo die fehlende dll auch nicht registriert ist (Wird ja glaube ich auch mit Access mitgeliefert). Kann man das umegen ? IMEX ist dafür zuständig das alles nur alt string gelesen wird wenn ich es richtig verstehe.

Kann mir jemand helfen ?

08.04.2009 - 00:10 Uhr

N'abend,

habe folgendes Problem lese eine Excel Datei folgendermaßen aus

    
        String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_filename + ";Extended Properties=Excel 8.0;";
            OleDbConnection connection = new OleDbConnection(connectionString);
            connection.Open();
            OleDbCommand selectCommand = new OleDbCommand("SELECT * FROM [Test$]", connection);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
            dataAdapter.SelectCommand = selectCommand;
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet);
            connection.Close();

            string[,] a = new string[1500, 57];

            DataTable dataTable = dataSet.Tables[0];
            int cols = dataTable.Columns.Count;

            int count = 0;

            foreach (DataRow row in dataTable.Rows)
            {
                for (int i = 0; i < cols; i++)
                {
                    if (count > 5)
                    {
                        if (i > 0 && i < 57)
                        {
                            object val = row[i];

                            if (val is double)
                            {
                                myarray[count - 6, i - 1] = val.ToString();
                            }
                            if (val is float)
                            {
                                myarray[count - 6, i - 1] = val.ToString();
                            }
                            if (val is int)
                            {
                                myarray[count - 6, i - 1] = val.ToString();
                            }
                            else if (val is string)
                            {
                                myarray[count - 6, i - 1] = val.ToString();
                            }
                            else if (val is DateTime)
                            {
                                myarray[count - 6, i - 1] = Convert.ToDateTime(val.ToString()).ToShortDateString();
                            }
                            else
                            {
//nur als test
                                try
                                {
                                    myarray[count - 6, i - 1] = val.ToString();
                                }
                                catch
                                {
                                    myarray[count - 6, i - 1] = "";
                                }
                            }
                        }
                    }
                }
                count++;
            }

mein Problem ist ich bestimmt Zeilen habe Zahlenwerte mit Komma (wie double)
wenn der reader jetzt auf solch eine Stelle stößt kann er die Zelle nicht auslesen, weiss jemand wie das geht ? String geht einwandfrei, Datum geht.
Wenn er auf solch eine Stelle stößt steht in "row_ = {}" -> also leer. Hat jemand eine Ahnung bzw. kann mir helfen ?

Merci schonmal

10.11.2008 - 14:35 Uhr

habe mein Problem jetzt folgendermassen gelöst: merci nochmal vorweg

wie ich schon sagte ist der Programmteil eine dll, diese wird von einem Hauptprogramm aufgerufen, klar. Ich kompiliere die dll mit anyCPU schmeiss die dll in ein bestimmtes verzeichniss, starte das hauptprogramm und er startet die dll. in diesem fall ist es egal, was für einstellungen die dll hatte anycpu oder x86. Das Hauptprogramm wird mit der Einstellung X86 gestartet. In dem fall gibt es auch kein Problem mit der Schnittstelle des Datenbanktreibers (ja obwohl er in der dll angsprochen wird und nicht vom Hauptprogramm).

10.11.2008 - 13:59 Uhr

das komisch ist aber das bei anderen projekten das einwandfrei geht egal welches Target Plattform gesetzt ist

10.11.2008 - 13:49 Uhr

so habe spaßeshalber ein neues Projekt (WindowsForm ControlLibrary ) erstellt, mit nichts drin, genau das gleiche Problem -> anycpu geht , X86 nein geht nicht , X64 ja geht

10.11.2008 - 13:45 Uhr

ich setze den marker auf die erste stelle die ich setzen kann und debugge und er öffnet den testcontainer macht aber dann nichts mehr keine exception , nichts, eigentlich sollte (und macht er auf dem anderen rechner) eine eifache oberfläche aufbauen. da passiert NICHTS tolles

10.11.2008 - 13:31 Uhr

der andere Rechner ist ein XP rechner

10.11.2008 - 13:27 Uhr

der witz ist er erstellt den Container und kommt nichtmal in die erste Klasse UserConrol.cs bei debuggen

10.11.2008 - 13:19 Uhr

es sind keine speziellen Implementierungen,

auf einem anderen rechner mit VS2008 lässt es sich einwandfrei kompilieren (allerdings XP Rechner) und im Testcontainer wird das Control einwandfrei angezeigt

10.11.2008 - 12:58 Uhr

was für eine genauere implementierung ?
Entweder man weiss auf sowas die antwort oder nicht ?
Sorry aber am Quellcode liegt es definitiv nicht muss eine einstellung sein, und somit hat das nichts mit der implementierung zutun

10.11.2008 - 12:48 Uhr

Tag die Herren,

habe folgendes Problem, ich erstelle (VS2008) eine WindowsForm ControlLibrary (.dll) unter Vista 64Bit, da ich aber einen Datenbankzugriff auf Access mache bekomme ich LOGISCHERWEISE den Fehler:

Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert.

Kein Problem ich stelle das Zielplattform auf X86 um.
Nun habe ich aber das Problem, und das hatte ich komischweise noch nie, das beim erstellen des Projektes nur der Testcontainer angezeigt wird, nichtmehr aber das Control. Stelle ich wieder auf "ANY CPU" um geht es wieder und das erstellte Control wird mir angezeigt.

Das selstame ist, das es bei anderen Projekten früherer Tage ging.
(Ich nehme nicht an das die Speichererweiterung auf 8 GByte RAM -> nein ich will hier nicht angeben <- und die Umstelleung im BIOS auf 64 Bit daran schuld sind, oder doch ?).

13.01.2008 - 19:49 Uhr

Mach ich sofort, musst mir nur sagen wie das geht. Danke für den hinweis 🙂

13.01.2008 - 19:16 Uhr

So funzt es leider auch nicht

Aber warum ?

Code:


                object objApp = null, objApp1 = null;
                object objBook = null, objBook1 = null;
                object objBooks = null, objBooks1 = null;
                object objSheet = null, objSheet1 = null;
                object objSheets = null, objSheets1 = null;
                object[] Parameters;

                Type objClassType, objClassType1;
                objClassType = Type.GetTypeFromProgID("Excel.Application");


                objApp = Activator.CreateInstance(objClassType);


                try
                {


                    // Vorhandenes Excel Öffnen (Stammdaten)
                    //Excel öffnen
                    //**************************************************************
                    #region Excel öffnen
                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Dokumente und Einstellungen\Bene\Desktop\Test1";           // Datei
                    objBook = objBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objBooks, Parameters);

                    
                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Dokumente und Einstellungen\Bene\Desktop\Test2";           // Datei
                    objBook1 = objBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objBooks, Parameters);
                    #endregion
                    //**************************************************************



                    objBook = objApp.GetType().InvokeMember("ActiveWorkbook", BindingFlags.Default | BindingFlags.GetProperty, null, objApp, null);
               //     objBook1 = objApp.GetType().InvokeMember("ActiveWorkbook", BindingFlags.Default | BindingFlags.GetProperty, null, objApp, null);
                    Parameters = new Object[1];
                    Parameters[0] = true;
                    objApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objApp, Parameters);

                    //Anzahl der Tabellen
                    //**************************************************************
                    #region Anzahl der Tabellen
                    objSheets = objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook, null);
                    objSheets1 = objBook1.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook1, null);

                    int count = (int)objSheets.GetType().InvokeMember("Count", BindingFlags.Default | BindingFlags.GetProperty, null, objSheets, null);
                    int count1 = (int)objSheets1.GetType().InvokeMember("Count", BindingFlags.Default | BindingFlags.GetProperty, null, objSheets1, null);

                    this.textBox1.Text = count.ToString();
                    this.textBox2.Text = count1.ToString();
                    #endregion
                    //**************************************************************

                    //Namen der Tabellen
                    //**************************************************************
                    // Tabelle 1
                    for (int i = 1; i <= count; i++)
                    {
                        Parameters = new Object[1];
                        Parameters[0] = i;      // Tabellennummer
                        objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters);

                        string a = (string)objSheet.GetType().InvokeMember("Name", BindingFlags.Default | BindingFlags.GetProperty, null, objSheet, null);
                        text0 = text0 + a + "\r\n";
                    }
                    textBox3.Text = text0;
                    
                    // Tabelle 2
                    for (int i = 1; i <= count1; i++)
                    {
                        Parameters = new Object[1];
                        Parameters[0] = i;      // Tabellennummer
                        objSheet1 = objSheets1.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets1, Parameters);

                        string a = (string)objSheet1.GetType().InvokeMember("Name", BindingFlags.Default | BindingFlags.GetProperty, null, objSheet1, null);
                        text1 = text1 + a + "\r\n";
                    }
                    textBox4.Text = text1;
                    //**************************************************************
                    objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);

                    
                    Parameters = new Object[1];
                    Parameters[0] = 3;      // Tabellennummer
                    objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters);

                    objBooks1 = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);

                    Parameters = new Object[1];
                    Parameters[0] = 3;      // Tabellennummer
                    objSheet1 = objSheets1.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets1, Parameters);
                    
                    
                    Parameters = new Object[2];
                    Parameters[0] = Missing.Value;
                    Parameters[1] = objSheet1;
                    objSheet.GetType().InvokeMember("Copy", BindingFlags.InvokeMethod , null, objSheet, Parameters);
                    textBox5.Text = "Copy OK";


Kopiert zwar, tut so aber als würde es nur ein Excel File geben, öffnen tut er beide

Warum ?

13.01.2008 - 18:50 Uhr

Also bin jetzt so weit gekommen, das kopieren funktioniert. Allerdins nur innerhalb einer der beiden Excel- Dateien

Lösung bisher:



            string text0 = "";
            string text1 = "";

            {
                object objApp = null, objApp1 = null;
                object objBook = null, objBook1 = null;
                object objBooks = null, objBooks1 = null;
                object objSheet = null, objSheet1 = null;
                object objSheets = null, objSheets1 = null;
                object[] Parameters;

                Type objClassType, objClassType1;
                objClassType = Type.GetTypeFromProgID("Excel.Application");


                objClassType1 = Type.GetTypeFromProgID("Excel.Application");


                objApp = Activator.CreateInstance(objClassType);


                objApp1 = Activator.CreateInstance(objClassType1);

                try
                {
                    objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);
                    objBooks1 = objApp1.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp1, null);

                    // Vorhandenes Excel Öffnen (Stammdaten)
                    //Excel öffnen
                    //**************************************************************
                    #region Excel öffnen
                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Dokumente und Einstellungen\Bene\Desktop\Test1";           // Datei
                    objBook = objBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objBooks, Parameters);

                    
                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Dokumente und Einstellungen\Bene\Desktop\Test2";           // Datei
                    objBook1 = objBooks1.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objBooks1, Parameters);
                    #endregion
                    //**************************************************************



                    objBook = objApp.GetType().InvokeMember("ActiveWorkbook", BindingFlags.Default | BindingFlags.GetProperty, null, objApp, null);
                    objBook1 = objApp1.GetType().InvokeMember("ActiveWorkbook", BindingFlags.Default | BindingFlags.GetProperty, null, objApp1, null);
                    Parameters = new Object[1];
                    Parameters[0] = true;
             //       objApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objApp, Parameters);

                    //Anzahl der Tabellen
                    //**************************************************************
                    #region Anzahl der Tabellen
                    objSheets = objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook, null);
                    objSheets1 = objBook1.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook1, null);

                    int count = (int)objSheets.GetType().InvokeMember("Count", BindingFlags.Default | BindingFlags.GetProperty, null, objSheets, null);
                    int count1 = (int)objSheets1.GetType().InvokeMember("Count", BindingFlags.Default | BindingFlags.GetProperty, null, objSheets1, null);

                    this.textBox1.Text = count.ToString();
                    this.textBox2.Text = count1.ToString();
                    #endregion
                    //**************************************************************

                    //Namen der Tabellen
                    //**************************************************************
                    // Tabelle 1
                    for (int i = 1; i <= count; i++)
                    {
                        Parameters = new Object[1];
                        Parameters[0] = i;      // Tabellennummer
                        objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters);

                        string a = (string)objSheet.GetType().InvokeMember("Name", BindingFlags.Default | BindingFlags.GetProperty, null, objSheet, null);
                        text0 = text0 + a + "\r\n";
                    }
                    textBox3.Text = text0;
                    
                    // Tabelle 2
                    for (int i = 1; i <= count1; i++)
                    {
                        Parameters = new Object[1];
                        Parameters[0] = i;      // Tabellennummer
                        objSheet1 = objSheets1.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets1, Parameters);

                        string a = (string)objSheet1.GetType().InvokeMember("Name", BindingFlags.Default | BindingFlags.GetProperty, null, objSheet1, null);
                        text1 = text1 + a + "\r\n";
                    }
                    textBox4.Text = text1;
                    //**************************************************************

                    
                    Parameters = new Object[1];
                    Parameters[0] = 2;      // Tabellennummer
                    objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters);

                    
                    Parameters = new Object[1];
                    Parameters[0] = 2;      // Tabellennummer
                    objSheet1 = objSheets1.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets1, Parameters);
                    
                    
                    Parameters = new Object[2];
                    Parameters[0] = Missing.Value;
                    Parameters[1] = objSheet1;
                    objSheet1.GetType().InvokeMember("Copy", BindingFlags.InvokeMethod , null, objSheet1, Parameters);
                    textBox5.Text = "Copy OK";
                    
                    #region Display Alerts abschalten
                    // Diplay Alert abschalten
                    Parameters = new Object[1];
                    Parameters[0] = false;
                    objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters);
                    textBox5.Text = "DisplayAlerts OK";

                    // Diplay Alert abschalten
                    Parameters = new Object[1];
                    Parameters[0] = false;
                    objApp1.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp1, Parameters);
                    textBox5.Text = "DisplayAlerts OK";
                    #endregion
                    
                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Dokumente und Einstellungen\Bene\Desktop\Test3.xls";
                    objBook1.GetType().InvokeMember("SaveCopyAs", BindingFlags.InvokeMethod, null, objBook1, Parameters);
                    textBox5.Text = "Save OK";

Wenn ich bei der Copy- Methode nun entweder den Parameter austausche gegen objSheet funzt die Methode Copy nicht mehr. Weiss jemand weswegen ?

11.01.2008 - 18:24 Uhr

Hi

Ich habe das Thema schonmal gepostet, ich weiss, aber ich bekomme das nicht hin. Vielleicht hat ja mittlerweile von euch eine Ahnung wie folgendes funktioniert:

Ich habe 2 bestehende Exceltabellen und möchte nun die einzelnen Tabellenblätter von Tabelle 2 hinter die Tabelle 1 kopieren Nicht das das schon schwer genug ist, muss es mittels late-Binding sein.

Habe auch einen Code gefunden, der ist aber in VB: Das ist genau der Code den ich brauche in C# und halt mittels Late- Binding.

VB:


Function Copy(sFilename As String, sFeld4ID As String)

    Dim iSheets As Integer
    Dim sRGINr, sRGIName, aFilename As String
    Dim bExpertise As Boolean
    
    aFilename = ActiveWorkbook.Name
    aname = Dir(aFilename)
    
    'Öffne Quellbericht
    Workbooks.Open Filename:=sFilename, UpdateLinks:=0
    'Application.WindowState = xlMinimized
    
    'Setzt nur den Dateinamen in die Variable
    dname = Dir(sFilename)
    
    Windows(aname).Activate
    
    'Umbenennung der Tabellenblätter damit es zu keinem Namenskonflikt kommt
    
    Sheets("a_1").Select
    Sheets("a_1").Name = "c_1"
    
    Sheets("b_1").Select
    Sheets("b_1").Name = "d_1"
    
    Windows(dname).Activate
    
    iSheets = Workbooks(aFilename).Worksheets.Count
        
    'Kopiere
    Sheets("3_XXX").Visible = True
    Sheets("5_XXX").Visible = True
    Sheets("3_XXX").Select
    
    sRGINr = Application.Workbooks(dname).Worksheets("3_XXX").Range("A3").Value
    sRGIName = Application.Workbooks(dname).Worksheets("3_XXX").Range("B3").Value
    
    Sheets("3_XXX").Copy After:=Workbooks(aFilename).Sheets(iSheets)

....

So mein Code sieht bis jetzt so aus:


        private void excel_fuegen()
        {            

                object objApp,   objApp1;
                object objBook,  objBook1;
                object objBooks, objBooks1;
                object objSheet, objSheet1;
                object objSheets,objSheets1;
                object objRange, objRange1;
                object[] Parameters;

                Type objClassType, objClassType1;
                objClassType = Type.GetTypeFromProgID("Excel.Application");
                objClassType1 = Type.GetTypeFromProgID("Excel.Application");
                
                objApp = Activator.CreateInstance(objClassType);
                objApp1 = Activator.CreateInstance(objClassType1);

                try
                {
                    objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);
                    objBooks1 = objApp1.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp1, null);


                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Test1";           // Datei 1
                    objBook = objBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objBooks, Parameters);

                    Parameters = new Object[1];
                    Parameters[0] = @"C:\Test3";           // Datei 2
                    objBook1 = objBooks1.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objBooks1, Parameters);

                    objBook = objApp.GetType().InvokeMember("ActiveWorkbook", BindingFlags.Default | BindingFlags.GetProperty, null, objApp, null);

                    objSheets = objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook, null);
                    objSheets1 = objBook1.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook1, null);

                    Parameters = new Object[1];
                    Parameters[0] = 1;      // Tabellennummer (4)
                    objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters);

                    Parameters = new Object[1];
                    Parameters[0] = 1;      // Tabellennummer (4)
                    objSheet1 = objSheets1.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets1, Parameters);


                    Parameters = new Object[2];
                    Parameters[0] = Type.Missing;
                    Parameters[1] = objSheet1;
                    objSheet.GetType().InvokeMember("Copy", BindingFlags.InvokeMethod, null, objRange, Parameters);

......

Aber ich bekomme einen Fehler bei Copy: Falsche Anzahl der Parameter. Also Excel sagt mir: Copy --> [After, Before ]

Ich weiss nichtmal das stimmt wie ich die Sache angehe. Kann mir einer helfen ?
Wie komme ich zu Copy After ????

Ein fettes Merci 👍 im Vorraus

03.01.2008 - 11:36 Uhr

ICH HABS 🙂

02.01.2008 - 16:05 Uhr

KANN NIEMAND HELFEN ???

28.12.2007 - 15:31 Uhr

Tag auch, hoffe derjendige der das liest hatte eine schönes Weihnachtsfest....

Aber nun zu meinem Problem

Ich erstelle mittels c# und LateBinding eine Powerpoint Präsentation.

Das geht soweit ganz gut das Anlegen.

Hier folgender Code:



 try
            {
                Parameters = new object[1];
                Parameters[0] = 1;
                objApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, objApp, Parameters);
  
                objPresSet = objApp.GetType().InvokeMember("Presentations", BindingFlags.GetProperty, null, objApp, null);

                Parameters = new object[4];
                Parameters[0] = strTemplate;
                Parameters[1] = 0;
                Parameters[2] = 1;
                Parameters[3] = 1;
                objPres = objPresSet.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, objPresSet, Parameters);

                objSlides = objPres.GetType().InvokeMember("Slides", BindingFlags.GetProperty, null, objPres, null);

                Parameters = new object[2];
                Parameters[0] = 1;
                Parameters[1] = 1;
                objSlide = objSlides.GetType().InvokeMember("Add", BindingFlags.Default | BindingFlags.InvokeMethod, null, objSlides, Parameters);

//*********************
// Ab hier gibt fehler
//*********************

                Parameters = new object[1];
                Parameters[0] = 1;
                objTextRng = objSlide.GetType().InvokeMember("TextRange",BindingFlags.Default | BindingFlags.InvokeMethod, null, objSlide, Parameters);

                Parameters = new object[1];
                Parameters[0] = this.klassedaten.getsummarynummerselected() + " " + this.klassedaten.getsummaryselected() + " - Berichtsblatt";
                objTextRng.GetType().InvokeMember("Text", BindingFlags.Default | BindingFlags.SetProperty, null, objTextRng, Parameters);
                

                MessageBox.Show("OK");



            catch (Exception theexeption)
            {
                string error = "Error:   ";
                error = string.Concat(error, theexeption.Message);
                error = string.Concat(error, " Line :");
                error = string.Concat(error, theexeption.Source);
                MessageBox.Show(error, "Error");
            }
           

Nun habe ich eine Problem mit TextRange, beim "frühen Binden" ist das alles kein Problem.

Codeausschnitt frühes Binden: (geht)

     
                objSlide = objSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitle);         
                objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
                objTextRng.Text = this.klassedaten.getsummarynummerselected() + " " + this.klassedaten.getsummaryselected() + " - Berichtsblatt";
                objTextRng.Font.Name = "CorpoS";
                objTextRng.Font.Size = 14;

Wie realisiert man diesen Code wie oben mittels Latebinding. kann mir einer Helfen ???

Merci im Voraus 🤔 🤔

21.12.2007 - 00:22 Uhr

Nabend, ich schon wieder 😁

Nachdem ich mit meinen Projekt jetzt so langsam vorankomme muss ich nochmal nachfragen ob Jemand von euch weiss wie ich ein Excel mittels Late- Binding und Protecte und Unprotecte

Ich habe es folgendermaßen versucht :

Parameters = new Object[1];
Prameters[0] = Type.Missing; // müsste stimmen wenn kein Passwort , oder ?
objsheet = objSheets.getType().InvokeMember("Unprotect", BindingFlags.SetProperty, null, obSsheets, Parameters);

es will nicht funtzen, weiss jemand warum ?

Wenn Jemand dadraußen eine Ahnung hat weiss er auch das Gegestück mittels "Protect" ?

20.12.2007 - 01:30 Uhr

Jo merci

Wollte dich nur mal loben, machst ne gute Arbeit. Ich glaube wenn jemand googelt und sucht nach Excel ... Com... C# trifft er früher oder später auf Dich. Gute Arbeit

Danke nochmal

20.12.2007 - 00:43 Uhr

So ich komme langsam voran

Weiss jemand wie man mit Late- Binding ein Bild einfügt in ein Excel ?

19.12.2007 - 21:51 Uhr

Hallo,

Ich schreibe seit 2 Wochen an einem Prog das in Excel Tabellen schreibt und liest. Is ja alles ganz schön mit COM. Nun habe ich erfahren das das Tool auf einem Rechner laufen soll auf dem nicht wie bisher gedacht Office 2003 sondern nur Office 2000 installiert ist. Ändern lässt sich das nicht, nur um die Frage abzufangen. Nun habe ich alles möglich durchsucht nach einer Lösung für Late- Binding. Klingt ja ganz gut.
Ich habe folgende Frage zu Late Binding.

Es gibt diese schöne Beispiel von Microsoft

http://support.microsoft.com/kb/302902

Diese Beispiel funktioniert auch einwandfrei.

Aber: Wie mache ich ein Range, Wie speichere ich, Wie öffne ich eine VORHANDENE Datei.

Hier noch ein Teil von meinen Code mit COM der funktioniert:


string file = @"C:\Dokumente und Einstellungen\Bene\Eigene Dateien\Visual Studio 2005\Projects\RGI Tool\RGI Tool\bin\Debug\ExcelOriginal\" + "RGI " + this.klassedaten.getsummarynummerselected() + " " + this.klassedaten.getsummaryselected() + ".xls";

            FileInfo fi = new FileInfo(file);

            if (fi.Exists)
            {
                Excel.Application exlApp = new Excel.Application();
                exlApp.DisplayAlerts = false;
                Excel.Workbook wb = exlApp.Workbooks.Open(  file, 
                                                            false, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing, 
                                                            Type.Missing
                                                            );

                try
                {
                    Excel.Worksheet wc;

                    // Tabellblatt Nr.2                   
                    
                    wc = (Excel.Worksheet)wb.Worksheets[2];
                    
                    wc.Unprotect(Type.Missing);            // Blattschutz aufheben

                    wc.Cells[42, 2] = this.textBox1.Text;       
                    wc.Cells[45, 2] = this.textBox2.Text;     
                    wc.Cells[48, 2] = this.textBox3.Text;       
                    
                    wc.Cells[42, 4] = this.dateTimePicker1.Value.ToShortDateString();
                    wc.Cells[45, 4] = this.textBox4.Text;   
                    wc.Cells[48, 4] = this.comboBox1.SelectedItem.ToString(); 
                    wc.Cells[51, 4] = this.textBox5.Text;  

                    wc.Protect( Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                     Type.Missing, Type.Missing, 
                                      Type.Missing);                        // Blatt schützen

wc = (Excel.Worksheet)wb.Worksheets[4];

                    for (int i = 0; i < this.refcounter; i++)
                    {

                        if (this.textboxarray[i] != null)
                        {
                            if (this.textboxarray[i].Text != "")
                            {
                                if (this.textboxarray4[i] != null)
                                {
                                    if (this.textboxarray4[i].Text != "")
                                    {
                                        double a = Convert.ToInt32(this.textboxarray4[i].Text);
                                        wc.Cells[i * 3 + 9, 14] = a.ToString();
                                    }
                                }
                            }
                        }

...........
else
{......

Weiss jemand da draußen jemand bescheid ?Kennt jemand eine andere Möglichleit als Late Binding, oder ( so wie es scheint )ist das das Beste ?

Merci für alle Antworten und wer das liest: --> Schöne Weihnachten

11.12.2007 - 10:29 Uhr

Kann mir keiner helfen ? ?(

11.12.2007 - 01:03 Uhr

Ich sag nur Zedgraph, am besten mal Googeln. Vielleicht bringts was, dann kannste das schrottige excel vergessen 😁