Hallo liebe C#´ler,
trotz einiger gelesenen Hilfestellungen im Netz bin ich leider nicht im Stande in eine Excel-Tabelle zu schreiben.
Einerseits habe ich bei CodeProjekt diesen Link über OLEDB gefunden, welcher leider net geht:
http://www.codeproject.com/Tips/705470/Read-and-Write-Excel-Documents-Using-OLEDB
Andererseits habe ich auch MSDN bemüht mit folgendem Link:
https://msdn.microsoft.com/de-de/library/ee342218.aspx
Den Link von CodeProjekt habe ich abgeschrieben und sieht wie folgt aus:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Hopfengarten.Model;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
namespace Hopfengarten
{
class Excel
{
public Excel()
{
}
private string VerbindungsStringErstellen()
{
Dictionary<string, string> eigenschaften = new Dictionary<string, string>();
//XLSX - Excel 2007, 2010, 2012, 2013
eigenschaften["Provider"] = "Microsoft.ACE.OLEDB.12.0;";
eigenschaften["Extended Properties"] = "Excel 12.0 XML";
eigenschaften["Data Source"] = @"Hopfengarten.xlsx";
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> eigenschaft in eigenschaften)
{
sb.Append(eigenschaft.Key);
sb.Append('=');
sb.Append(eigenschaft.Value);
sb.Append(';');
}
return sb.ToString();
}
public void SchreibeInExcel()
{
string VerbindungsString = VerbindungsStringErstellen();
using (OleDbConnection con = new OleDbConnection(VerbindungsString))
{
try
{
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
MessageBox.Show("Verbindung zu Excel hergestellt");
con.Close();
}
catch
{
MessageBox.Show("Verbindung zur Excel-Tabelle fehlgeschlagen!");
}
con.Close();
}
}
}
}
Leider fliege ich permanent bei con.Open() in den catch rein, was ja bedeutet es konnte keine Verbindung aufgebaut werden.
Wenn ich den Anweisungen von der MSDN folge, scheitere ich da es kein Microsoft.Office.Interop
in den Verweisen gibt 😦
Weiß jmd vlt was ich nu machen kann? Habe gestern auch gelesen das man ab Office 2003 besser XML verwenden soll, da es scheinbar schneller ist, doch das war mir zu hoch, war glaub ich auch ein Thread von hier!
Ich will lediglich in Excel schreiben und dann (wenn es möglich ist) von C# die Excel ausdrucken lassen.
Wäre über Hilfe sehr dankbar, es gibt zwar echt viel im Net davon, aber leider für einen Anfänger alles ein wenig zu hoch 😉
lg Samkirchner
PS: Obwohl ich die einfachen Grundstrukturen kenne, fällt es mir schwer den von mir oben eingefügten Code zu verstehen. Selbstverständlich weiß ich was ne Dictionary ist und was die Foreach macht, doch was der StringBuilder macht, bin ich ratlos.
Liebe Grüße
Sam
catch(Exception ex)
Den Fehler schaut man sich dann zB im Debugger an
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Wenn Du nicht weißt, was eine C# Klasse macht und sie gehört zum Framework, dann schau bitte in die Dokumentation. Dafür ist sie da.
StringBuilder-Klasse
In der Regel - wie bei der StringBuilder-Klasse - zeigt die MSDN zudem ausführliche Beispiele, wie die Klasse verwendet wird und was das Resultat dessen ist.
Man kann aber auch weiterhin den Debugger dazu verwenden, um zu schauen, was eine Klasse macht, wenn man es nicht weiß und/oder man aus der Verwendung im Quellcode nicht schlau wird.
Hier ist ja zu sehen, dass der StringBuilder wohl eine Methode mit dem Namen AppendLine hat, der Strings annimmt.
Zusammen mit dem Namen StringBuilder könnte man jetzt herleiten, dass diese Klasse wohl strings zusammen kettet.
Ansonsten wie gesagt die Doku sollte hier der erste Anlaufpunkt sein.
Microsoft.Office.Interop muss übrigens via Lazy Binding referenziert wird (bzw. wird es in der Regel so gemacht).
Alternativ gibt es Wrapper wie zB NetOffice (http://netoffice.codeplex.com/).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke für die schnelle Antwort 😃
- bitte im Titel angeben, was das Problem ist. So hilft das keinem was.
- man fängt in einem catch die Exception. Dort drin steht dann, was das Problem ist.
im Anhang habe ich die Ex hinzugefügt, was mir allerdings ein Rätsel ist.
Den Fehler schaut man sich dann zB im Debugger an
>Wenn Du nicht weißt, was eine C# Klasse macht und sie gehört zum Framework, dann schau bitte in die Dokumentation. Dafür ist sie da.
>
In der Regel - wie bei der StringBuilder-Klasse - zeigt die MSDN zudem ausführliche Beispiele, wie die Klasse verwendet wird und was das Resultat dessen ist.
Dies habe ich selbstverständlich gemacht, jedoch ohne für mich schlüssigen Erfolg
Microsoft.Office.Interop muss übrigens via Lazy Binding referenziert wird (bzw. wird es in der Regel so gemacht).
Alternativ gibt es Wrapper wie zB NetOffice (
> ).
Hier verstehe ich mal wieder nur Bahnhof 😦
Sorry wenn ich mich dumm anstelle jedoch ist es als Newbie einfach alles sagen wir mal unverständlich! Ich meine ich habe viel gelernt aber trotzdem noch ein Anfänger, welcher das meiste Zeug net versteht, selbst wenn man mehrere Erklärungen liest (kennt glaub jeder 😉 ).
Liebe Grüße
Sam
Die Fehlermeldung ist doch eindeutig - einfach mal nach "OLEDB 12.0" suchen und dann findet man z.B. OleDB Connection zur Access DB
Die Fehlermeldung ist doch eindeutig - einfach mal nach "OLEDB 12.0" suchen und dann findet man z.B.
>
hm, auf der Seite war ich auch schon, aber da da für Access stand habe ich das verworfen ^^.
Und sehe da es funzt ! Mensch es ist echt anstrengend, denn da mache ich schon knapp 3 Tage rum 😦.
Danke Cat 😃
Liebe Grüße
Sam
Hallo SamKirchner,
Als Alternative ist auch OpenXML empfehlenswert.
Gruss Lhyn
Für mich schaut das nach einem 32 / 64 bit Problem aus.
Der Zugriff auf die OLEDB funktioniert von 64 bit Windows nicht korrekt, da hat sich schon so manch einer die Zähne ausgebissen.
Die Einstellung des Projekts mal auf X86 umstellen, könnte helfen 😁
.. er hat das Problem bereits gelöst 😃
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code