Avatar billede sbaht Nybegynder
28. marts 2006 - 13:47 Der er 7 kommentarer og
1 løsning

Eksportere data fra MS-SQL til Excel med ASP.NET

Jeg skal lave en knap der ekportere en tabel fra sql db til Excel, er der nogen der ved hvordan man griber det an, jeg kan sagten ekportere til et datagrid men nu skal det eksporteres direkte til Excel.
Avatar billede arne_v Ekspert
28. marts 2006 - 14:04 #1
Noget med at lave en OleDbConnection til Excel og gemme til den måske
Avatar billede davidfossil Nybegynder
28. marts 2006 - 14:37 #2
Arnes forslag vil (AFAIK) kræve at serveren der afvikler applikationen har Excel installeret, eller i det mindste en "Excel driver" af en eller anden art.

Ved du hvilken version af Excel dine modtagere bruger? Jeg har selv brugt ExcelXmlWriter, som er et ganske gratis komponent, flere gange, men dette forudsætter at modtagerne af dine Excel dokumenter har version 2003 af programmet.

http://carlosag.net/Tools/ExcelXmlWriter/
Avatar billede davidfossil Nybegynder
28. marts 2006 - 14:41 #3
En anden (lidt mere fesen) løsning er at præsentere din data i fx et GridView/DataGrid og rendere denne kontrol som det eneste i dit response. Så kan man lige klistre en Excel mime type på Response objektet og klienten vil automatisk åbne din html-side i Excel. Du får ikke noget Excel dokument ud af det, men jeg tror at alle nyere udgaver af Excel (2000+) vil være i stand til at behandle HTML-dokumentet som en slags Excel-fil.
Avatar billede sbaht Nybegynder
28. marts 2006 - 15:07 #4
Modtageren vil bruge Excel 2002, serveren har så hvidt jeg ved ikke installeret Excel.
Jeg har lavet noget der kan eksportere fra et Datagrid, men det er bare ikke hensigtsmæssgigt her.
Avatar billede arne_v Ekspert
28. marts 2006 - 15:12 #5
jeg vil tro at alle forsøg på at skrive en .xls fil server side vil kræve
Excel på server

en meget nemt alternativ vil være at skrive en .csv fil

dem åbner windows default med Excel
Avatar billede sbaht Nybegynder
29. marts 2006 - 13:53 #6
Jeg har fået det til virke ved hjælp af et datagrid og følgende Response.ContentType = "application/vnd.ms-excel";
Såå <Davidfossil> hvis det sådan noget lignende du også tænkte på kan jo lige smide et svar. :-)
Avatar billede davidfossil Nybegynder
29. marts 2006 - 21:33 #7
sbath : Ja, det var hvad jeg prøvede at sige med at "klistre en Excel mime type på Response objektet". Jeg går ud fra at du renderer i HTML og barre "narrer" Excel med din ContentType? I så fald bør du lige checke hvordan dokumentet opfører sig inden i Excel - kan man summere tal-felter, lave grafer etc.? (såfremt dette overhovedet er relevant i dit projekt)

arne_v: Jeg har på et tidspunkt lavet noget Excel export fra et .NET projekt, hvor jeg brugte noget VB kode fra et Source Forge projekt til at skrive Excel (BIFF) filer. Som det er tilfældet med de fleste MS formater er dokumentformatet ganske lukket, så pålideligheden af denne slags hjemmebryggede løsning kan altid diskuteres. Ikke desto mindre kører den pågældende applikation stadig og Excel-filerne den spytter ud kan læses fra Excel 97 og frem. Så det kan faktisk godt lade sig gøre )
Avatar billede sbaht Nybegynder
30. marts 2006 - 13:32 #8
Dokumentet fungere tilsyneladende ganske glimrende i Excel, så det er bare rigtig godt.. Hvis det skulle have din interesse, kan du se hvad det er jeg har foretaget mig nedenfor.

SqlConnection conn = new SqlConnection( strConnection );
                SqlCommand cmd = new SqlCommand( searchSql, conn );
                DataSet ds = new DataSet();
                SqlDataAdapter adpt = new SqlDataAdapter( cmd );
                cmd.Connection.Open();

                try
                {
                    adpt.Fill( ds );
                }
                finally
                {
                    cmd.Connection.Close();
                }

                DataGrid1.DataSource = ds;
                DataGrid1.DataBind();
                Response.Clear();
                Response.Buffer= true;
                Response.ContentType = "application/vnd.ms-excel";
                Response.Charset = "";
                this.EnableViewState = false;

                System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);

                this.ClearControls( DataGrid1 );
                DataGrid1.RenderControl(oHtmlTextWriter);

                Response.Write(oStringWriter.ToString());

                Response.End();
            }

        }

        private void ClearControls(Control control)
        {
            for (int i=control.Controls.Count -1; i>=0; i--)
            {
                ClearControls(control.Controls[i]);
            }

            if (!(control is TableCell))
            {
                if (control.GetType().GetProperty("SelectedItem") != null)
                {
                    LiteralControl literal = new LiteralControl();
                    control.Parent.Controls.Add(literal);
       
                    try
                    {
                        literal.Text = (string)control.GetType().GetProperty("SelectedItem").GetValue(control,null);
                    }
                    catch

                    {

                    }

                    control.Parent.Controls.Remove(control);
                }

                else

                    if (control.GetType().GetProperty("Text") != null)
                {
                    LiteralControl literal = new LiteralControl();
                    literal.Text = (string)control.GetType().GetProperty("Text").GetValue(control,null);
                    control.Parent.Controls.Remove(control);
                }
            }
            return;
        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester