Laden...

Frage zu Excel Export-->falsche Mappe

Erstellt von Ulf# vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.075 Views
U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren
Frage zu Excel Export-->falsche Mappe

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

D
115 Beiträge seit 2006
vor 17 Jahren

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();


U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren

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

D
115 Beiträge seit 2006
vor 17 Jahren

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

U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren

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

U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren

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

U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren

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

U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren

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

U
Ulf# Themenstarter:in
170 Beiträge seit 2006
vor 17 Jahren

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