Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Export Excel Problema

  1. #1
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541

    Export Excel Problema

    Ciao a tutti, ho un problema con un export in excel. Di seguito il codice:
    codice:
    response.Clear()
            response.Charset = ""
            response.ContentType = "application/vnd.xls"
            response.AddHeader("Content-Disposition", "attachment;filename=" & nomeExport.Replace(" ", "_") & "_" & String.Format("{0:yyyyddMMhhmmss}", DateTime.Now) & ".xls")
            response.ContentEncoding = System.Text.Encoding.UTF8
            Dim stringWrite As New System.IO.StringWriter
            'create an htmltextwriter which uses the stringwriter
            Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite)
            htmlWrite.Write("<table><td colspan=""" & Tbl.Columns.Count & """><h2>" & nomeExport & " (" & Format(Date.Now(), "dd/MM/yyyy") & ") Operatore: " & SicOperatore.OperatoreValidatoUsername & "</h2></td></table>")
            'instantiate a datagrid
            Dim dg As New System.Web.UI.WebControls.DataGrid
            dg.DataSource = Tbl
            dg.DataBind()
            dg.RenderControl(htmlWrite)
            response.Write(stringWrite.ToString)
            Audit.Registra(nomeExport & " in Excel")
            response.End()
    Quando si apre Excel non si carica niente resta una pagina vuota.
    Ultima modifica di djciko; 28-08-2016 a 23:56

  2. #2
    approccio il problema da un altro punto di vista: per creare un *vero* file excel uso un componente http://www.gemboxsoftware.com/spread.../asp-net-excel che esiste anche in versione free. HTH

  3. #3
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541
    Quote Originariamente inviata da optime Visualizza il messaggio
    approccio il problema da un altro punto di vista: per creare un *vero* file excel uso un componente http://www.gemboxsoftware.com/spread.../asp-net-excel che esiste anche in versione free. HTH
    Non posso aggiungere componenti esterni purtroppo.

  4. #4
    ok (ma come mai non li puoi aggiungere?)

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    1000 anni fa e' stato fatto un elenco di link utili (Questo) fra questi c'era l'esportazione in excel di un Datagrid / Gridview. Che framework stai usando ?

    Comunque il succo del codice era:
    codice:
        ' Set the content type to Excel.
        Response.ContentType = "application/vnd.ms-excel"
        ' Remove the charset from the Content-Type header.
        Response.Charset = ""
        ' Turn off the view state.
        Me.EnableViewState = False
    
    
        Dim tw As New System.IO.StringWriter()
        Dim hw As New System.Web.UI.HtmlTextWriter(tw)
    
    
        ' Get the HTML for the control.
        DataGrid1.RenderControl(hw)
        ' Write the HTML back to the browser.
        Response.Write(tw.ToString())
        ' End the response.
        Response.End()

    e funzionava. Sei sicuro che non accada qualcosa prima del response.end ? (intendo nel metodo Registra della classe Audit).

    Ad ogni modo il link era questo: https://support.microsoft.com/it-it/kb/317719
    Ultima modifica di djciko; 29-08-2016 a 00:08

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    questo è un tipico esempio di come ci si può complicare la vita trasformando una cosa facile in difficile e (a mio avviso) forse anche inutile

    Comunque, con quel codice, quel che si manda è una stringa del tipo "<table>***</table>" come documento allegato, con estensione xls

    detto questo, togliendo le righe inutili del tuo codice, ho questo:
    codice:
    Dim dt As DataTable = GetDataTable(gl.StringaConnessioneTest, "select * from tabella")
    Dim html As String = getTableFromDataTable(dt)
    
    Response.Clear()
    Response.Charset = ""
    Response.ContentType = "application/vnd.xls"
    Response.AddHeader("Content-Disposition", "attachment;filename=" & "prova".Replace(" ", "_") & "_" & String.Format("{0:yyyyddMMhhmmss}", DateTime.Now) & ".xls")
    Response.ContentEncoding = System.Text.Encoding.UTF8
    Response.Write(html)
    Response.End()
    Dim dt As DataTable = GetDataTable(gl.StringaConnessioneTest, "select * from tabella") recupera in un datatable una tabella o vista di database

    Dim html As String = getTableFromDataTable(dt) fa la scansione riga per riga, campo per campo del datatable e scrive in una stringa (meglio un stringbuilder)

    il resto del codice è quello proposto da te

    Alla fine funziona, ma non è un foglio excel vero
    Pietro

  7. #7
    Utente di HTML.it L'avatar di mexican
    Registrato dal
    Oct 2001
    residenza
    cava de tirreni
    Messaggi
    3,541
    Quote Originariamente inviata da pietro09 Visualizza il messaggio
    questo è un tipico esempio di come ci si può complicare la vita trasformando una cosa facile in difficile e (a mio avviso) forse anche inutile

    Comunque, con quel codice, quel che si manda è una stringa del tipo "<table>***</table>" come documento allegato, con estensione xls

    detto questo, togliendo le righe inutili del tuo codice, ho questo:
    codice:
    Dim dt As DataTable = GetDataTable(gl.StringaConnessioneTest, "select * from tabella")
    Dim html As String = getTableFromDataTable(dt)
    
    Response.Clear()
    Response.Charset = ""
    Response.ContentType = "application/vnd.xls"
    Response.AddHeader("Content-Disposition", "attachment;filename=" & "prova".Replace(" ", "_") & "_" & String.Format("{0:yyyyddMMhhmmss}", DateTime.Now) & ".xls")
    Response.ContentEncoding = System.Text.Encoding.UTF8
    Response.Write(html)
    Response.End()
    Dim dt As DataTable = GetDataTable(gl.StringaConnessioneTest, "select * from tabella") recupera in un datatable una tabella o vista di database

    Dim html As String = getTableFromDataTable(dt) fa la scansione riga per riga, campo per campo del datatable e scrive in una stringa (meglio un stringbuilder)

    il resto del codice è quello proposto da te

    Alla fine funziona, ma non è un foglio excel vero
    Ciao, grazie per le risposte alla fine il problema non riguardava il codice ma un'opzione di Excel versione 2013 che impedisce l'apertura di file scaricati da internet.

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho capito, ciao
    Pietro

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.