Hallo Patrik,

hier die Klasse, wie gesagt, sie schreibt direkt ein File,
aber der Umbau zur Rückgabe eines StringBuffers sollte nicht schwer sein:



using System;
using System.IO;
using System.Data;
using System.Collections;



    public class CsvWriter
    {
        private string _Seperator = ";";

        public string Seperator
        {
            get
            {
                return _Seperator;
            }
            set
            {
                _Seperator = value;
            }
        }

        public CsvWriter()
        {
        }


        public void WriteCsv(DataTable dtIn, string sCsvFileName)
        {
            WriteCsv(dtIn,sCsvFileName,true);
        }

public void WriteCsv(DataTable dtIn, string sCsvFileName, bool bWriteHeader)
        {

            //FileInfo fiCsv = new FileInfo(sCsvFileName);

System.IO.StreamWriter swOut = new StreamWriter(sCsvFileName,false,System.Text.Encoding.Default);

            string[] arr = new String[dtIn.Columns.Count];

            // write column header
            if(bWriteHeader)
            {

                for(int i=0; i<dtIn.Columns.Count; i++)
                {
arr[i] = GetWritableValue(dtIn.Columns[i].ColumnName,_Seperator);
                }
                swOut.WriteLine(string.Join(_Seperator,arr));
            }

            // write rows
            for(int j=0; j<dtIn.Rows.Count;j++)
            {
                for(int i=0; i<dtIn.Columns.Count; i++)
                {
                    arr[i] = GetWritableValue(dtIn.Rows[j][i],_Seperator);
                }
                swOut.WriteLine(string.Join(_Seperator,arr));
            }

            swOut.Flush();
            swOut.Close();

        }

        public static string GetWritableValue(object o, string sSeperator)
        {
            if(o==null || o== Convert.DBNull)
                return"";
            else if(o.ToString().IndexOf(sSeperator)==-1)
                return o.ToString();
            else
                return "\""+o.ToString()+"\"";
        }


    }


Brunmair Patrick (DLG) wrote:
Wenn du mir so etwas schicken könntest wäre toll !
danke

-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von Daniel Wasser
Gesendet: Donnerstag, 17. November 2005 15:27
An: asp.net@glengamoi.com
Betreff: Re: AW: [Asp.net] Excel export

Hallo Patrik,
du kannst eine .csv datei erstellen.
die wird als exeldatei(iconmaessig) dargestellt,
mit exel geöffnet, und die zahlen sind alle korrekt in der tabelle...

wenn du moechtest schicke ich dir eine funktion(c#) die aus einer
datatable eine .csv datei macht.

d.h. du generierst eine datatable(ist auch im dataset enthalten das an deinem gridcontrol hängt) schickst das an die funktion und bekommst eine csv zurück (kannst es umbauen das es dir den stringbuilder zurückgibt). dann schickst du das ganze an den client(so wie du's jetzt auch machst) und alles ist gut. diese lösung funktioniert auf allen rechnern, auch auf denen wo kein excel installiert ist.

die zweite möglichkeit ist eine "richtige" exeldatei zu generieren,
da muss aber auf deinem server excel installiert sein.
wie das geht musst du mal googlen.

in der regel reicht aber die csv, es sei denn du möchtest
exceldateien mit mehreren arbeitsmappen (mehrere tabellen in einer datei) an den client senden.

Grüße, Daniel


Brunmair Patrick (DLG) wrote:
Wie sollte ich dass sonst machen ?? muß ich doch oder nicht ???

-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von Daniel Wasser
Gesendet: Donnerstag, 17. November 2005 10:45
An: asp.net@glengamoi.com
Betreff: Re: [Asp.net] Excel export

Sorry,
meinte natürlich
.xls

Daniel Wasser wrote:
Hallo Patrick,
verstehe ich richtig, das du eigentlich HTML
"verkleidet" als .xml sendest?


Grüße, Daniel


Brunmair Patrick (DLG) wrote:
Hallo,
ich mache einen excel export aus einem datagrid heraus , dass funktioniert eigentlich ganz gut doch ich bekomme in excel die werte als text rein. Daher kann ich keine berechnungen durchführen (wenn ich sie nicht umwandle). Kann man dass beim export irgendwie definieren ?? Hier mal mein excel export:


If grid.Items.Count.ToString + 1 < 65536 Then
            HttpContext.Current.Response.Clear()
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel" HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" & saveAsFile & ".xls")
            ' Remove the charset from the Content-Type header.
            HttpContext.Current.Response.Charset = ""
            'HttpContext.Current.Response.WriteFile("style.txt")
            ' Turn off the view state.
            grid.EnableViewState = False
            Dim tw As New System.IO.StringWriter
            Dim hw As New System.Web.UI.HtmlTextWriter(tw)
            ' Get the HTML for the control.
            grid.HeaderStyle.ForeColor = Color.Black
            grid.HeaderStyle.BackColor = Color.Red
            grid.ItemStyle.ForeColor = Color.Black
            grid.BorderColor = Color.White
            ClearControls(grid)
            grid.RenderControl(hw)
            ' Write the HTML back to the browser.
            HttpContext.Current.Response.Write(tw.ToString())
            ' End the response.
            HttpContext.Current.Response.End()


Sub ClearControls(ByVal control As Control)
        Dim i As Integer
        For i = control.Controls.Count - 1 To 0 Step -1
            ClearControls(control.Controls(i))
        Next i

        If TypeOf control Is System.Web.UI.WebControls.Image Then
            control.Parent.Controls.Remove(control)
        End If

        If (Not TypeOf control Is TableCell) Then
If Not (control.GetType().GetProperty("SelectedItem") Is Nothing) Then
                Dim literal As New LiteralControl
                control.Parent.Controls.Add(literal)
                Try
literal.Text = CStr(control.GetType().GetProperty("SelectedItem").GetValue(control, Nothing))
                Catch
                End Try
                control.Parent.Controls.Remove(control)
            Else
If Not (control.GetType().GetProperty("Text") Is Nothing) Then
                    Dim literal As New LiteralControl
                    control.Parent.Controls.Add(literal)
literal.Text = CStr(control.GetType().GetProperty("Text").GetValue(control, Nothing))
                    control.Parent.Controls.Remove(control)
                End If
            End If
        End If
        Return
    End Sub 'ClearControls


Mit freundlichen Grüßen
Patrick Brunmair

_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
Asp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an