Farbpalette aus Bild oder Logo generieren

30. August 2007 Keine Kommentare »

Der Palette Generator ist ein praktisches Tool für Webdesigner. Aus einem Bild (z.B. einem Logo) erzeugt er eine passende Farbpalette.

Das Online-Tool steht hier zur kostenlosen Benutzung zur Verfügung.

Tags:, ,

Bookmarken bei... del.icio.us:Farbpalette aus Bild oder Logo generieren furl:Farbpalette aus Bild oder Logo generieren Y!:Farbpalette aus Bild oder Logo generieren

Automatisierung von Excel mit C#

27. August 2007 2 Kommentare »

In diesem Beitrag möchte ich zwei Wege zeigen, wie man aus .NET heraus Excel-Worksheets erstellen kann. Im Beispiel werde ich eine bestehende Excel-Installation nutzen, um ein Worksheet zu erzeugen, einen kleinen Text hineinzuschreiben und anschließend abzuspeichern. Auf die gleiche Weise kann man dann Formeln editieren, Worksheets ausdrucken und Vieles mehr. (Prinzipiell gibt es auch die Möglichkeit, Worksheets ohne Mithilfe von Excel – aber mit Hilfe einer geeigneten Bibliothek – zu erzeugen. Das Paket NetAdvantage der Firma Infragistics bietet beispielsweise diese Möglichkeit.)

Will man aus einer .NET-Anwendung heraus auf eine bestehende Excel-Installation zugreifen, stellt sich die Frage, ob bereits während der Entwicklung eine DLL der entsprechenden Excel-Version vorhanden ist. Ist das der Fall, gestaltet sich das weitere Vorgehen recht einfacht:

  1. Die .NET-Anwendung muss gegen die entsprechende “Excel-DLL” linken
  2. In der Anwendung steht nun der Namensraum “Excel” zur Verfügung, der alle Typen des Excel-Objektmodells beinhaltet (VBA-Programmierern wird hier einiges bekannt vorkommen).
  3. Es wird eine Instanz von Excel.Application erzeugt. Über diese Instanz können Workbooks erzeugt oder geladen werden.
  4. Es folgt die weitere Bearbeitung des Workbooks und dessen Inhalte je nach Gusto.

Das Ganze kann dann etwa so aussehen:
[code lang="csharp"]
public void EarlyBinding (string p_strFileName) {
Excel.Application oApp = new Excel.Application ();
Workbook oWorkbook = (Workbook) oApp.Workbooks.Add ("Arbeitsmappe");
Worksheet oWorksheet = (Worksheet)oWorkbook.ActiveSheet;
oWorksheet.Cells[1, 1] = "Foobar"; oWorksheet.SaveAs (p_strFileName, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);

oApp.Quit ();

Marshal.ReleaseComObject (oWorksheet);
Marshal.ReleaseComObject (oWorkbook);
Marshal.ReleaseComObject (oApp);
}
[/code]
Diese Methode setzt voraus, dass die Typen von Excel bereits während der Kompilierzeit bekannt sind. Das muss allerdings nicht immer gegeben sein. Möglicherweise wird die .NET-Anwendung auf einem Rechner installiert, dessen Excel-Version nicht im Vorfeld bekannt ist. Die Anwendung muss daher in der Lage sein, erst zur Laufzeit an die installierte Excel-Version zu binden. Dieses Vorgehen wird auch späte Bindung genannt (im Gegensatz zur oben gezeigten frühen Bindung).

Späte Bindung an eine unbekannte DLL setzt den Einsatz von Reflection voraus und sollte daher mit Bedacht eingesetzt werden.

[code lang="csharp"]

public void LateBinding (string p_strFileName) {
object oApp = null;
object oWorkbooks = null;
object oWorkbook = null;
object oWorksheets = null;
object oWorksheet = null;
object oRange = null;
object[] vParams;

try {
//Excel-Instantiieren
Type tpApp = Type.GetTypeFromProgID ("Excel.Application");
oApp = Activator.CreateInstance (tpApp);
//Lies WorkBooks-Collection
oWorkbooks = tpApp.InvokeMember ("Workbooks",
BindingFlags.GetProperty, null, oApp, null);
Type tpWorkBooks = oWorkbooks.GetType ();
//Erstelle ein neues WorkBook
oWorkbook = tpWorkBooks.InvokeMember ("Add",
BindingFlags.InvokeMethod, null, oWorkbooks, null);
Type tpWorkBook = oWorkbook.GetType ();
//Lies WorkSheets des neuen WorkBooks
oWorksheets = tpWorkBook.InvokeMember ("Worksheets",
BindingFlags.GetProperty, null, oWorkbook, null);
Type tpWorkSheets = oWorksheets.GetType ();

//Das erste WorkSheet soll verwendet werden
vParams = new Object[1];
vParams[0] = 1;
oWorksheet = tpWorkSheets.InvokeMember ("Item",
BindingFlags.GetProperty, null, oWorksheets, vParams);
Type tpWorkSheet = oWorksheet.GetType ();

//Ein Range-Object für die linke obere Zelle wird angefordert
vParams = new Object[2];
vParams[0] = "A1";
vParams[1] = Missing.Value;
oRange = tpWorkSheet.InvokeMember ("Range",
BindingFlags.GetProperty, null, oWorksheet, vParams);
Type tpRange = oRange.GetType ();

//Der Text "Foobar" wird der Value-Eigenschaft des Range-Objekts zugewiesen
vParams = new Object[1];
vParams[0] = "Foobar";
tpRange.InvokeMember ("Value", BindingFlags.SetProperty,
null, oRange, vParams);

//Speichern der aktuellen Arbeitsmappe
object s = Excel.XlSaveAction.xlSaveChanges;
tpWorkBook.InvokeMember ("SaveAs", BindingFlags.InvokeMethod, null, oWorkbook,
new object[] { p_strFileName });

tpApp.InvokeMember ("Quit", BindingFlags.InvokeMethod, null, oApp, null);

} catch (Exception ex) {
string strError = ex.Message;
} finally {
Marshal.ReleaseComObject (oApp);
Marshal.ReleaseComObject (oWorkbook);
Marshal.ReleaseComObject (oWorkbooks);
Marshal.ReleaseComObject (oWorksheet);
Marshal.ReleaseComObject (oWorksheets);
Marshal.ReleaseComObject (oRange);
}
}

[/code]

Die Schritte sind hier die gleichen wie im oberen Beispiel. Nicht zuletzt aus Performanzgründen ist die erste Methode allerdings zu bevorzugen.

Tags:, , ,

Bookmarken bei... del.icio.us:Automatisierung von Excel mit C# furl:Automatisierung von Excel mit C# Y!:Automatisierung von Excel mit C#

Virtue Mart – Shop Komponente für Joomla

23. August 2007 Keine Kommentare »

VirtueMart ist eine Shop Komponente für Joomla. VirtueMart kann hier kostenlos heruntergeladen werden. Im Download-Paket befindet sich eine ausführliche Anleitung über die Installation des Shops.

Der Vorteil von VirtueMart liegt in seiner Integration in Joomla. Nutzt ihr Kunde bereits Joomla als CMS für seine Website, dann entfällt die aufwändige Einarbeitung in ein neues System. VirtueMart kann mit einer Vielzahl an Zusatzmodulen erweitert werden. Es bringt alle Funktionen mit, die ein Online-Shop benötigt.

  • Verschiedenen Bezahlmöglichkeiten (Nachnahme, Vorkasse, Lastschrift, PayPal, Kreditkarte sofern Ihr Provider dies unterstützt)
  • Aktionspreise, Rabatte, Gutscheine
  • Einfache Verwaltung der Artikel durch Produktgruppen
  • Verwaltung unterschiedlicher Steuersätze

Folgende Links helfen bei den ersten Gehversuchen mit VirtueMart

Tags:, , ,

Bookmarken bei... del.icio.us:Virtue Mart - Shop Komponente für Joomla furl:Virtue Mart - Shop Komponente für Joomla Y!:Virtue Mart - Shop Komponente für Joomla

Mit Zanebug mehr aus Tests herausholen

20. August 2007 Keine Kommentare »

Wem die Auswertungen von NUnit nicht aussagekräftig genug sind oder wer sich umfangreichere Kontrollmöglichkeiten bei der Ausführung von Unit Tests wünscht, der ist mit dem Tool Zanebug bestens bedient. Zanebug bietet eine GUI für NUnit, die einen schnellen Zugriff auf eine Vielzahl von Testdaten. Das Tool kann hier kostenlos heruntergeladen werden.

Neben der Konsolenausgabe und weiteren Ausgaben hat man auch Zugriff auf den Windows Performance Monitor. Dies ist sehr praktisch, wenn man Tests durchführt, welche die Performance der Software testen sollen.

Tags:, ,

Bookmarken bei... del.icio.us:Mit Zanebug mehr aus Tests herausholen furl:Mit Zanebug mehr aus Tests herausholen Y!:Mit Zanebug mehr aus Tests herausholen

FlexWiki – Kostenloses Wiki auf .NET Basis

15. August 2007 Keine Kommentare »

FlexWiki ist ein kostenloses Wiki auf .NET Basis. Es kann hier heruntergeladen werden.

Die Dateien werden einfach in einem neuen virtuellen Verzeichnis im IIS abgelegt und schon ist das Wiki betriebsbereit. Die Speicherung der Inhalte erfolgt standardmäßig im Dateisystem. Die Inhalte können aber auch im SQL-Server gespeichert werden.

Tags:, ,

Bookmarken bei... del.icio.us:FlexWiki - Kostenloses Wiki auf .NET Basis furl:FlexWiki - Kostenloses Wiki auf .NET Basis Y!:FlexWiki - Kostenloses Wiki auf .NET Basis