Hallo Forum,
ich stöbere nun schon seit 2 Tagen in den passenden Beiträgen zu meinem Problem,jedoch habe ich nichts gefunden was mir weiterhelfen kann.
Ich habe eine OleDB Verbindung zu einer ACCES DB und lasse mir die Daten in meiner Form in Textboxen mit entsprechendem Label anzeigen (Die Textboxen wurden aut. erstellt nachdem ich mir links im Datenexplorer die jeweilige Tabelle in die Form ziehe )
Nun möchte ich eine EXPORT to EXCEL Function haben,welches mir die Daten in eine excel datei speichert.was ist der "einfachste" dies hinzubekommen. ich habe einige Funktionen hier im Forum versucht zu nutzen oder welche bei codeproject
hier zum bsp
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
myDataGrid.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
was genau ist und macht response, er erkennt es bei mir nicht,ist es deswegen weil es hier im bsp ein datagrid verwendet wird ??
danke schonmal
Ulf
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee
Hallo Ulf,
Das Response-Objekt enthält das, was der Webserver an deinen Browser sendet. kann aber sein, das dir eine using-Direktive fehlt.
Den Code hab ich bei mir verwendet, probier mal:
//HTTP_Response löschen und vorbereiten für die Daten
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Buffer = true;
System.Web.HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + strFileName + "\"");
System.Web.HttpContext.Current.Response.Charset = "";
System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.xls";
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
dgExport.RenderControl(oHtmlTextWriter);
System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString());
System.Web.HttpContext.Current.Response.End();
Hallo d.gierse,
vielen dank für deine antwort, ich habe grade nach weiterem durchlesen die Vermutung dass es sich bei dieser Function um asp bzw webservern geht. Beides benutze ich ja nicht 😁 aber klappt das auch bei einer stinknormalen Windows Application ?
gruß und thx
Ulf
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee
ja kann man auch aus einer normalen Windows-Anwendung machen, dann muss man den Stream halt nicht in eine Response-Objekt, sondern in eine Datei schreiben.
Dafür hab ich aber grade kein Beispiel auf der Platte liegen
So,bin nun soweit dass ich Daten von meiner Anwendung in ein neu generiertes Excel-Blatt reinschreiben kann, jedoch ist mein Ziel in ein vorhandenes Excel-Blatt nur bestimmte Zellen anzusprechen bzw. lesen und füllen, alles andere soll nicht angerührt werden.
Wie könnte ich das realisieren ?
hier der code soweit :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace exceluebung
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
Excel.Range oRng;
try
{
//Startet Excel und bekommt ein Application object
oXL = new Excel.Application();
oXL.Visible = true;
//Es wird ein Workbook hinzugefügt
oWB = (Excel._Workbook)(oXL.Workbooks.Add(true));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
//Einfügen der Überschriften für Zeile 1
oSheet.Cells[1, 1] = textBox1.Text;
string[,] saNames1 = new string[1,4];
//Zeile 2
saNames1[ 0, 0] = textBox1.Text;
oXL.Visible = true;
oXL.UserControl = true;
}
catch( Exception ex)
{
MessageBox.Show( errorMessage, "Error" );
}
}
}
}
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee
hab jetzt folgendes ausprobiert
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace exceluebung
{
public partial class Form1 : Form
{
private string FileName;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
Excel.Range oRng;
try
{
//Startet Excel und bekommt ein Application object
oXL = new Excel.Application();
oXL.Visible = true;
//Es wird ein Workbook hinzugefügt
oWB = (Excel._Workbook)(oXL.Workbooks.Add(FileName));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
hier habe ich bei der add methode den dateinamen mitgegeben
//Einfügen der Überschriften für Zeile 1
oSheet.Cells[1, 1] = textBox1.Text;
//Formatierung A1:G1
oSheet.get_Range("A1", "G1").Font.Bold = true;
oSheet.get_Range("A1", "G1").VerticalAlignment =
Excel.XlVAlign.xlVAlignCenter;
//Formatierung A4:G4
oSheet.get_Range("A4", "G4").Font.Bold = true;
oSheet.get_Range("A4", "G4").VerticalAlignment =
Excel.XlVAlign.xlVAlignCenter;
//Formatierung A7:G7
oSheet.get_Range("A7", "G7").Font.Bold = true;
oSheet.get_Range("A7", "G7").VerticalAlignment =
Excel.XlVAlign.xlVAlignCenter;
// Erstellen eines Arrays für die Ausgabe in das Excel File 4 Spalten
string[,] saNames1 = new string[1,4];
//Zeile 2
saNames1[ 0, 0] = textBox1.Text;
oXL.Visible = true;
oXL.UserControl = true;
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Line: " );
errorMessage = String.Concat( errorMessage, theException.Source );
MessageBox.Show( errorMessage, "Error" );
}
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button3_Click(object sender, EventArgs e)
{
OpenFileDialog opf = new OpenFileDialog();
opf.Filter = "Excel Dateien (*.xlsx)|*.xlsx|Alle Dateien (*.*)|*.*";
if (opf.ShowDialog() == DialogResult.OK)
{
FileName = opf.FileName;
}
}
}
}
habe den Dateinamen in einem string gespeichert und als owb übergeben,jedoch dupliziert er die datei,d.h. wenn ich datei.xls ansprechen will wird datei1.xls benutzt
bin ich auf dem richtigen weg
weiß jemand rat ?
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee
kann mir jemand diesbzgl helfen,wollte das diese Wo noch schaffen???
gruß
Ulf#
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee
ich habe es wiedermal selber gelöst, statt add sollte man open nehmen
es ist doch immer wieder schön wenn man selber auf die Erkenntnis kommt 😉
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee
noch eine frage : Wie keine ich selber eine Excel-Datei erstellen die ich für den Export verwenden möchte ?
Gruß
Ulf#
Ein Ziel ist nicht immer zum Erreichen da,
oft dient es nur zum richtigen Zielen...
Bruce Lee