Ich bräuchte die Kalendereintrge vom Exchange
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
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)
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
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)
{
???????
}
@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.
keiner der mir helfen kann ??
Dataerror abzuschalten bzw. den code dort einzubauen ist ja wohl falsch.
sorry jungs gibts dazu ein kleines Beispiel, komme leider nicht weiter
Wieso Textbox ?? Ich gebe die Daten direkt in der Zelle des DataGridViews an.
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
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
Ok, ich hoffe ich habe eine passende Lösung:
ich rufe den GC auf
System.GC.Collect();
danach geht es, also passt
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
Hast du etwas zu Shadow Copying ? Links ?
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);
}
}
}
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
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
Habe gerade gelesen das MAPI nicht so toll sein soll
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
Mir würde eine kleine Übersicht bzw. wie ich alles einzuordnen habe reichen.
Merci
Tag die Damen, Tag die Herren,
Habe eine etwas komische frage und finde irgendwie keine richtige Antwort im Netz.
Ich mach es kurz:
Gibt es einen Unterschied zwischen WPF Webanwendung und WPF/E oder ist damit daselbe gemeint?
Wo ist der Unterschied zwischen ASP.NET und WPF Webanwendung ? Bzw. der Unterschied zu WPF/E? Oder benutze ich WPF und ASP.NET zusammen ?
Soll Silverlight WPF ersetzen, ja oder nein?
Mit was baue ich denn nun eine ASP.NET Seite und bastel eine "coole" Oberfläche dazu ?
Merci im Voraus
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 😃
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
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'";
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 ?
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
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).
das komisch ist aber das bei anderen projekten das einwandfrei geht egal welches Target Plattform gesetzt ist
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
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
der andere Rechner ist ein XP rechner
der witz ist er erstellt den Container und kommt nichtmal in die erste Klasse UserConrol.cs bei debuggen
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
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
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 ?).
Mach ich sofort, musst mir nur sagen wie das geht. Danke für den hinweis 🙂
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 ?
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 ?
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
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 🤔 🤔
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" ?
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
So ich komme langsam voran
Weiss jemand wie man mit Late- Binding ein Bild einfügt in ein Excel ?
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
Ich sag nur Zedgraph, am besten mal Googeln. Vielleicht bringts was, dann kannste das schrottige excel vergessen 😁