Visualizzazione dei risultati da 1 a 5 su 5

Discussione: DataSet to excel

  1. #1

    DataSet to excel

    ciao a tutti!
    in una pagina web ho un bottone che al click deve eseguire una query e esportare i dati in formato excel, chiedendo però all'utente dove effettuare il download.
    ho fatto praticamente tutto, mi manca proprio l'ultima parte.
    codice:
            protected void export_Click(object sender, EventArgs e)
            {
                string collezione = txtCollezioni.Text.ToUpper();
                DataTable dt = db.getGiacenze("K2.5.002").Tables[0];
                int rowNo = dt.Rows.Count;
                int colNo = dt.Columns.Count;
                int colIndex = 0;
                Excel._Application app = new Excel.Application();
                Excel._Workbook wk = app.Workbooks.Add(Type.Missing);
                Excel._Worksheet sheet = null;
                sheet = wk.Sheets[1];
                sheet = wk.ActiveSheet;
                //sheet.Name = "Giacenze_" + DateTime.Now.ToString().Replace(":", "").Replace("-", "").Replace(" ", "");
                sheet.Name = "giac";
                Excel.Range range;
                foreach (DataColumn col in dt.Columns)
                {
                    colIndex++;
                    app.Cells[1, colIndex] = col.ColumnName;
                }
                object[,] objData = new object[rowNo, colNo];
                for (int i = 0; i < rowNo; i++)
                {
                    for (int j = 0; j < colNo; j++)
                    {
                        objData[i, j] = dt.Rows[i][j];
                    }
                }
                range = sheet.Range[app.Cells[4, 3], app.Cells[rowNo + 1, colNo]];
                range.NumberFormat = "@";
                range.Value2 = objData;
                sheet.Range[app.Cells[4, 3], app.Cells[rowNo + 1, colNo + 1]].NumberFormat = "yyyy-m-d h:mm";
                //wk.SaveAs(Response.WriteFile(Server.MapPath(@"~/logo_large.gif")), Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                wk.Close();
                app.Quit();
                GC.Collect();
            }
    come faccio a far uscire la finestra di salvataggio??
    probabilmente è una cosa banale, ma non sono riuscito a capire.

  2. #2

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ti riporto comunque un esempio ---in VB.Net--- fatto tempo fa (si appoggia ad una GridView che si chiama dgTurniDipendente) :

    codice:
        Protected Sub btEsportaExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btEsportaExcel.Click
            dgTurniDipendente.AllowPaging = "False"
            dgTurniDipendente.DataBind()
    
            Dim tw As New System.IO.StringWriter()
            Dim hw As New System.Web.UI.HtmlTextWriter(tw)
            Dim frm As HtmlForm = New HtmlForm()
    
            Response.ContentType = "application/vnd.ms-excel"
    
            Response.AddHeader("content-disposition", "attachment;filename=export.xls")
            Response.Charset = ""
            EnableViewState = False
    
            Controls.Add(frm)
            frm.Controls.Add(dgTurniDipendente)
            frm.RenderControl(hw)
    
            Response.Write(tw.ToString())
            Response.End()
        End Sub

  4. #4
    intanto grazie per la risposta.
    ho fatto così:
    codice:
            protected void export_Click(object sender, EventArgs e)
            {
                string collezione = txtCollezioni.Text.ToUpper();
                DataTable dt = db.getGiacenze("K2.5.002").Tables[0];
                if (dt.Rows.Count > 0)
                {
                    System.IO.StringWriter sw = new System.IO.StringWriter();
                    HtmlTextWriter hw = new HtmlTextWriter(sw);
                    DataGrid grid = new DataGrid();
                    grid.DataSource = dt;
                    grid.DataBind();
                    grid.RenderControl(hw);
                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AddHeader("content-disposition", "attachment;filename=giacenze.xls");
                    Response.Charset = "UTF-8";
                    this.EnableViewState = false;
                    Response.Write(sw.ToString());
                    Response.End();
                    btnGiacenze.Visible = true;
                }
            }
    funziona, ma con un piccolo problema.
    quando provo ad aprire il file mi esce questo messaggio:
    codice:
    Il formato del file che si sta cercando di aprire è diverso da quello specificato dall'estensione del file.........
    e poi dentro si vede tutto sformattato e senza celle.
    da cosa può dipendere??

  5. #5
    per lo stile ho risolto creando il DataGrid direttamente nella pagina, e delegando al code-behind solo il DataBind.

    nn ho trovato però nessuna soluzione al primo possibile.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.