Schreiben in Excel Datei mit C#

Vasarius

Grünschnabel
An alle die mir helfen können,

schreibe gerade an einem Programm und habe Access, als Datenbank im Hintergrund.
Mein Problem: Ich starte eine SQL - Abfrage an meine Access-Datenbank und die mir gelieferten Daten, möchte ich dann in eine Excel-Datei schreiben und sie dann abspeichern (Dateiname soll das aktuelle Datum beinhalten) und anschließend ausdrucken. Der Druckdialog zur Auswahl des Druckers usw. soll auch erscheinen. Das ganze soll aber im Hintergrund geschehen - sprich - die Excel - Datei soll im Hintergrund geöffnet und gedruckt werden

Die SQL - Abfrage an Access ist kein Problem, man kann also davon aus gehen, dass die Daten schon vorhanden sind (Z.B. in einer String - Variable).
Die Verbindung zur Excel Datei funktioniert auch, ich konnte den Inhalt schon auslesen. Weiß allerdings nicht, wie ich gezielt, die einzelnen Zellen in Excel anspreche.

mein Code in C# (Visual Studio.NET)
public void button6_Click(object sender, System.EventArgs e)
{

string Name = "Mustermann";
// Verbindungsstring für die Excel-Datei
OleDbConnection Verbindung_Datenbank =
new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; " +
@"data source=D:\Programmierung\TestExcel.XLS; " +
@"Extended Properties=Excel 8.0;");

//Tabellenblatt eins in die Zelle A4 in der Excel-Datei TestExcel.xls
string SQL_Schreiben = "INSERT INTO Tabelle1 (A4) VALUES (Name)";
OleDbCommand Befehl_Auswahl =
new OleDbCommand (SQL_Schreiben,Verbindung_Datenbank);
Verbindung_Datenbank.Open();
Befehl_Auswahl.ExecuteNonQuery();
Verbindung_Datenbank.Close();
}

Das Programm bringt dann eine OleDbException bei der Zeile "Befehl_Auswahl.ExecuteNonQuery();". Also gehe ich davon aus, das der SQL - Befehl nicht stimmt.

Meine Fragen also:
1. wie kann ich einzelne Zellen in einer Excel Datei mit C# ansprechen.
2. wie kann ich diese Excel Datei im Hintergrund öffnen
3. wie kann ich diese Excel Datei im Hintergrund unter einem bestimmten Dateinamen abspeichern
4. wie kann ich aus dem Hintergrund - sprich - ohne das Excel offensichtlich offen ist, dies Datei ausdrucken (mit Windowsdruckdialog für die Auswahl des Druckers und Format)

Wenn mir da jemand weiter helfen könnte, wäre ich sehr erfreut und dankbar.
Gruß Vasarius
 
Hallo Vasarius,
hatte vor geraumer Zeit das gleiche Problem...

Schritt 1:
Füge in deinem Projekt die Referenz zur "Microsoft Excel 10.0 Object Library" hinzu ( in .Net: add Referenz -> COM -> Auswahl der Libraries)

-> :
using Microsoft.Office.Core;
using Excel;

Schritt2:
ein Bespielcode zum Beschreiben eines Excel Worksheets:

object n = System.Reflection.Missing.Value;
string source = "verzeichnis+ datei" //falls bestehende Excelvorlage verwendet werden soll

Excel.ApplicaitonClass excel = new Excel.ApplicationClass();

Excel.Workbook workbook = this.Excel.Workbooks.Open( source,n,n,n,n,n,n,n,n,n,n,n,n,n,n);

Excel.Worksheet worksheet =new Excel.WorksheetClass();
worksheet= (Excel.Worksheet) excel.ActiveWorkbook.ActiveSheet;

nun ist vorerst alles nötige erzeugt....
wichtig! : standardmäßig wird Excel geöffnet aber ist nicht sichtbar
möchte man es sichtbar haben -> excel.Visible = true

nun kannst du ganz einfach auf jede beliebige Zelle des Worksheets zugreifen:

z.B. : worksheet.Cells[ "Zeilenindex", "Spaltenindex"] = "irgendein Text";
also: worksheet.Cells[1,1] = "hallo";


zum Speichern gibt es in der Klasse Workbook eine Funktion "SaveAs" d.h:

z.B. workbook.SaveAs("speicherpfad",...missing objects)

beim Drucken kann ich dir leider nicht weiterhelfen, aber ich denke, dass es da auch eine einfache funktion gibt..

mfg
Lector
 
Hallo Lector,
schon mal schönen Dank für deinen Beitrag.
Ich habe die Library hinzugefügt, allerdings konnte ich nur die Microsoft Excel 11.0 Object Library wählen, was nicht so dramatisch sein dürfte.
Ferner habe ich auch "using Microsoft.Office.Core;" und "using Excel;´" eingetragen.
Folgenden Code habe ich so eingetragen:

public void button6_Click(object sender, System.EventArgs e)
{
object n = System.Reflection.Missing.Value;
string Pfad = @"D:\Programmierung\Mitarbeiter.xlt";
Excel.ApplicationClass exapp = new Excel.ApplicationClass();
Excel.Workbook wb =
this.Excel.Workbooks.Open(source,n,n,n,n,n,n,n,n,n,n,n,n,n,n);
Excel.Worksheet worksheet = new Excel.WorksheetClass();
worksheet = (Excel.Worksheet) exapp.ActiveWorkbook.ActiveSheet;
exapp.Visible = true;
worksheet.Cells[2,1] = "Max Mustermann";
}

erhalte jedoch 2 Fehlermeldungen
- die eine Fehlermeldung bezieht sich auf "this.Excel.Workbooks.............."
und lautet "Form6 enthält keine Definition für Excel" /Habe den Verweis
schon mehrmals entfernt und hinzugefügt, aber der Fehler bleibt

- die andere lautet "Identifizierer erwartet, 'namespace' ist ein Schlüsselwort "
und bezieht sich auf die Zeile "using Excel;"


Kannst du mir da weiter helfen, habe keinen Schimmer woran das liegen kann. Bewege mich halt noch nicht so lange in C#.

Schon mal besten Dank.

Gruß Vasarius
 
Hallo Vasarius,

mir ist ein kleiner Fehler unterlaufen! und zwar in dieser Zeile:

Excel.Workbook workbook = this.Excel.Workbooks.Open( source,n,n,n,n,n,n,n,n,n,n,n,n,n,n);


korrekt würde es in meinem Beispiel lauten:

Excel.Workbook workbook = excel.Workbooks.Open( source,n,n,n,n,n,n,n,n,n,n,n,n,n,n);


und in deinem Beispiel:

Excel.Workbook wb = exapp.Workbooks.Open( source,n,n,n,n,n,n,n,n,n,n,n,n,n,n);


sorry, trotz tausenfachem durchlesen, schleust sich halt immer mal ein Fehler ein

Gruß Lector
 
Druckproblem

An alle da draußen, die das lesen!

Ich habe immer noch das Problem mit dem drucken aus Excel über C#.
Zur Zeit nutze ich die Funktion
"worksheet.PrintOut(n,n,1,true,false,n,true,n);"

damit klappt es zwar, dass man ausdrucken kann, allerdings kann man bei dieser Funktion nicht das Papierformat (A4,A3) oder (Hoch-, Querformat) wählen.
Es wird dann einfach in A4 Hochformat gedruckt. Diese Einstellung soll aber variabel bleiben.

Kann mir jemand da weiter helfen.

Schon mal besten Dank im voraus.

Gruß Marco
 
Zurück