Hallo Juy Juka,
Danke für die schnelle Antwort. Ich werde das mal so wie von dir vorgeschlagen versuchen. Worin besteht denn der Unterschied zwischen einer Klassenbibliothek und der Steuerelementebibliothek? Ich bin zugegeben noch nicht ganz so fit mit .NET. Und VS Version, wurde zum Buch dazugeliefert. Sollte also schon in sich stimmig sein.
Grüße, Alex
Hallo,
ich möchte eine Steuerelementebibliothek erstellen und stehe schon am Anfang vor einem Problem. Mein schlaues Buch sagt mir Projekt->neu->Windows-Steuerelementebibliothek. Nur gibts die Option Windows Steuerelementebibliothek bei mir nicht. Ich arbeite mit VS 2008 Express. Kann mir eine verraten, wo der Haken ist, bzw. wie ich das anders bewerkstelligen kann?
Danke & Grüße, Alex
ich hab's erst mal so gemacht:
myRange = myRange.get_Resize(tmpArr.Length, 1);
for (int i = 0; i < tmpArr.Length; i++)
{
myArr2[i, 0] = tmpArr1[i];
}
myRange.Value2 = myArr2;
Aber das kann ja nicht der Weisheit letzter Schluss gewesen sein.
Gruß, Alex
Hallo,
ich hab's fast gelöst, eine Frage hätte ich noch. Momentan sieht's so auch.
Excel.Application myExcel;
this.Activate();
myExcel = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel.Workbook myWorkbook = myExcel.ActiveWorkbook;
Excel.Sheets mySheets = myWorkbook.Worksheets;
Excel.Worksheet myWorksheet = (Excel.Worksheet)myWorkbook.ActiveSheet;
Excel.Range myRange = myExcel.ActiveCell;
myRange = myRange.get_Resize(tmpArr.Length, 1);
myRange.Value2 = tmpArr;
Nun habe ich noch ein Problem: Das Array wird immer waagerecht in Excel übertragen, ich möchte es aber senkrecht reinschreiben, transponiert quasi. Weiß einer, wie ich das anstelle? Einfach nur die Range-Größe zu ändern geht nicht.
Gruß, Alex
Hi,
Wie gesagt, ich weiß immer nocht nicht, wie ich mit get, set die ienzelnen Arrayfelder anspreche.
Ich kann das mit Excel.Interop ja mal noch etwas genauer angeben, vielleicht weiß Du ja einen Rat.
also, das funktioniert:
myRange = myRange.get_Resize(tmpArr.Length, 1);
myRange.Value2 = tmpArr;
das funktioniert nicht:
myRange = myRange.get_Resize(tmpArrList.Count, 1);
myRange.Value2 = tmpArrList;
Weißt Du einen Rat?
Gruß, Alex
Mir fällt gerade ein, ich hatte das ganze schon mal mit 'ner Array-List versucht, dann aber an anderer Stelle Probleme bekommen, als ich die komplette ArrayList ins Excel übertragen wollte, das ging mit dem Array besser bzw. ging überhaupt.
Ich muss dazu sagen, dass ich noch nicht so lange C#-mäßig unterwegs bin, wie man an meinen Fragen vielleicht merkt.
Gruß, Alex
Hi,
Die () durch [] zu ersetzen war nicht die Lösung 🤔
Warum verwendest du keine normalen Collections? Z.B. eine RowsCollection und eine ColumnsCollection welche Cell Objekte zurückliefern.
Diese Frage lässt sicht kurz und knapp beantworten: Weil ich noch nicht weiß, was das ist ?( Werd's mal rausfinden. Danke für den Tipp.
Hi,
ich habe in meiner Klasse ein mehrdimensionales string-Array, das ich über get und set ansprechen möchte. Allerding fünktioniert das nicht so, wie ich mir das mit den Indexern gedacht habe. Kann mir kurz einer sagen, wo der Fehler ist, ich kann's mir nicht erklären. Der Compiler meckert immer nur, dass er hinter get und set ein ";" haben möchte und die Intellisense bietet "value" nicht an. Ist es überhaupt sinnvoll, das so zu machen, ich habe gelesen, dass es für die Performance nicht so toll sein soll, weil immer das ganze Array kopiert wird pro Zugriff. Geht das effizienter?
Danke und Gruß, Alex
public class myDataSetClass
{
private string[,] resultBuffer = new string[10, 32];
public string[,] ResultBuffer(int xIndex, int yIndex)
{
get
{
return(resultBuffer);
}
set
{
resultBuffer[xIndex, yIndex] = value;
}
}
//Constructor
public myDataSetClass()
{
resultBuffer = new string[10, 32];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 32; j++)
{
resultBuffer[i, j] = "";
}
}
}
}
hab noch nix gemacht mit VBA, aber ich kann es mir ja anschauen. Ist doch visual basic, wenn ich mich niht irre. vielleicht werde ich ja mit etwas mühe schlau draus. ich versuch das mal.
gruß alex
Hallo nochmal,
ich hab mal noch ein bisschen probiert und bin zu einem Ergebnis gekommen, wie folgt:
Excel.Application oExcelApp;
this.Activate();
oExcelApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel.Workbook oWorkbook = oExcelApp.ActiveWorkbook;
Excel.Sheets oSheets = oWorkbook.Worksheets;
Excel.Worksheet oWorksheet = (Excel.Worksheet)oWorkbook.ActiveSheet;
Excel.Range oRange = oExcelApp.ActiveCell;
oWorksheet.get_Range(oRange, oRange).Value2 = "Hallo";
Damit kann ich jetzt auf eine bereits laufende Excel-Anwendung zugreifen und in die Aktive Zelle "Hallo" schreiben.
nur noch zwei Fragen:
geht es effizienter ("schöner"), ich ziele speziell auf die letzte Codezeile ab, die mir doch etwas - sagen wir mal - umständlich erscheint.
Wenn ich jetzt weitere Zellen ansprechen will, z.B. ActiveCell + 1, wie kann ich dann oRange inkrementieren? Das wäre sehr wichtig für mich.
Bis hierher erstmal vielen Dank für eure nützlichen Hinweise.
Alex
Hallo red_dragon69
Der Link von vbprogger war schon sehr hilfreich, auch wenn nicht genau das passiert, was in der Anleitung steht (einige Exceptions). Muss nun nur noch die aktive Zelle ansprechen. Aber des Verständnisses wegen, werd ich deinen Vorschlag auch mal testen.
Aber um zu vermeiden, dass ich jedes Mal dumme Fragen stellen muss - gibt's zu dem Thema Office und C# gescheite Literatur? Mein wirklich dickes C#-Buch gibt zu diesem Thema leider gar nix her und immer nur abtippen und nicht richtig verstehen, was andere mal geschrieben oder gepostet haben, bringt's am Ende auch nicht. Momentan bin ich nur erschlagen von all den tausend Möglichkeiten, die es gibt, um ein un d dieselbe Sache zu tun. Mal davon abgesehen, dass ich keine von ihnen richtig kenne und weiß, was sich dahinter verbirgt. Ich weiß nur, dass ich das irgendwie ändern will - schnellstens.
Gruß, Alex
hab's rausgefunden: die Datei muss gespeichert sein. einfach nur Excel öffenen reicht nicht.
Hallo,
@vbprogger:
Vielen Dank für den nützlich Link. Ich hab das gleich mal ausprobiert und bekomme beim Anzeigen des Namens des Aktiven Workbooks eine NullReferenzException. Aber eine Zeile darüber wird doch was zugewiesen (hoffe ich).
Habe Office 2007 und Libraryversion 12 eingebunden. Hast Du eine Ahnung woran das liegen kann?
Gruß, Alex
@red-dragon69:
Prozessabfrage funktioniert so. Wie ich jetzt die Daten ins Excel bekomme, hab ich aber noch nicht rausgefunde. Schein kein häufiges Problem zu sein.
Grüße, Alex
Vielen Dank.
Ich habe momnetan etwas Schwierigkeiten damit, mir vorzustellen, wie ich das prinzipiell angehen soll. Wenn ich eine Instanz von Excel erstelle, es also selbst öffne, kann ich dann mit dem Objekt hantieren. Aber nun ist ja Excel schon da und ich habe kein konkretes Objekt. Deswegen komme ich nicht so richtig zu Rande, weil ich nicht so richtig weiß, wie ich mich von Außen auf das laufende Excel "aufschalten" soll. Vielleicht unterliege ich aber auch nur einem Denkfehler.
Ich probier erst mal deinen Vorschlag.
Grüße, Alex
Hi,
ich hatte die Frage schon mal an ein ähnliches Topic angehäng aber keine Antwort erhalten, deshalb versuche ich es nochmal separat. Ich hoffe, ihr legt mir das nicht als Cross-Post aus.
folgendes:
ich möchte in meiner Anwendung feststellen, ob Excel läuft, auch dann wenn jemand Excel extern geöffnet hat und es z.B. schon vor meiner Application auf dem Rechner lief. Dann möchte ich die aktive Zelle im aktiven Blatt detektieren und etwas reinschreiben. Ich weiß zwar wie man das aus dem Programm heraus machen kann, aber ich habe keine Ahnung, wie ich das anstellen soll, wenn ich auf ein bereits geöffnetes Excel zugreifen soll.
Danke und Gruß, Alex
gibt es denn eine möglichkeit zu checken, ob excel geöffnet ist, auch wenn es von "extern" geöffnet wurde? und wie kann ich dann die aktive zelle im aktiven blatt ansprechen. wenn ich alles aus der application heraus mache, ist mir klar, wie's geht. aber wie mache ich das, wenn excel schon offen ist. stehe da echt ein bisschen auf dem schlauch diesbezüglich.
gruß, alex
Hallo,
ich hab dasselbe Problem mit Excel in C#.
Ich möchte prüfen, ob Excel schon geöffnet ist, wenn ja, möchte ich prüfen, welche Zelle angewählt ist und dot einen Wert reinschreiben.
passt das so (ich frage, weil's nicht läuft 😉)
Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();
if(myExcel.Windows.Count > 0)
{
//mach was
}
Count ist immer null, egal, ob Excel göffnet ist oder nicht
Danke und Gruß, Alex
Hallo,
ich glaube, bis mir solche Probleme Kopfzerbrechen bereiten, wird es noch dauern. Ich bin noch ziemlich neu, auch wenn ich das Gefühl habe, in letzter Zeit schon einiges mitbekommen zu haben, was C# und .NET angeht. Jedenfalls vielen Dank für eure Mühe und Hilfe.
Gruß, Alex
Hallo,
danke erst einmal für eure Antworten.
Fehler gefunden. Man sollte in der Methodedklaration natürlich dieselbe Dimension verwenden wie beim return, dann klapp's auch 😉
Gruß, Alex
Hallo,
kurze Frage, habe leider nichts Konkretes dazu gefunden:
Ich möchte ein mehrdimensionales Array aus einer Methode zuückgeben, wie stelle ich das an?
return (arr); mag er nur bei eindimensionalen Arrays
Danke, Alex
Jetzt hab ich es begriffen.
Danke
Gruß, Alex
Hallo,
Ich müsste ja in der for-Schleife, wo ich allen vorhandenen Ports das Vent zuweise, schreiben:
myPortArr_.DataReceived += new System.IO.Ports.SerialData.ReceivedEventHandler( //hier die Methode, aber die ist ja bei jedem Port eine andere);
ich kann ja nicht schreiben (myPortArr__DataReceived), weil syntaktisch Unsinn.
das ist eigentlich mein Problem
Gruß, Alex
Hallo,
vielen Dank für deine prompte Antwort.
Ich habe mich etwas unglücklich ausgedrückt.
Ich möchte gern wissen, wie ich das ganze (EventHandler zuordenen) in eine Array packen kann um dann bei Bedarf entsprechend Event zuzuweisen oder nicht bzw. ob das überhaubt geht.
Danke, ALex
Hallo,
folgendes Problem.
Ich habe eine Anwendung, die bis zu zehn COM-Ports bedienen kann. Diese befinden sich in einem Array:
myPortArr = new SerialPort
{
myPort1, ... ,myPort10
};
Nun frage ich zu Beginn die verfügbaren Ports schreibe sie in ein Array aus Listen und initialisiere und öffne entsprechen der Anzahl diese Ports:
for(int i = 0; i<SerialPort.GetPortNames().Length; i++)
{
//Ports in ListenArray schreiben
myPortArr[i] = new SerialPort(ListenArray[i].Selected.ToString(), ..... ,);
}
Nun meine Frage, wie kann ich den Events der geöffneten Port, und nun denen, eine Methode zuweisen. Ich knn das ja nicht statisch machen, sondern muss das abhängig davon tun, wieviele Ports ich geöffnet habe. Also auch irgendwie über ein Array. Und wenn jemand ein Gerät abzieht, muss ich diese Zweisung auch wieder rückgängig machn können. Geht das irgendwie
Danke und Gruß, Alex
Ok, meine Frage war dämlich. Da ich im Projektbaum nix wie Form[Entwurf] gefunden hatte, war ich leicht verunsichert. Danke
Gruß, Alex
Hallo,
flogendes Problem:
ich habe versehentlich den Reiter Form1[Entwurf] geschlossen bzw. weggeklickt. Nun bekomme ich ihn nicht wieder geöffnet. Wo kann ich das machen?
Danke, Alex
PS.: Ich verwende Visual Studio 2008