2016-07-19 46 views
6

Un metodo per scaricare un GridView in un file Excel da scaricare/aprire da Internet è stato interrotto di recente con i nuovi aggiornamenti di Windows.Aprire i file excel da Internet apre una finestra excel vuota

Il mio codice scarica da GridView in un file XLS utilizzando StringWriter, HTMLTextWriter e RenderControl. Un approccio comune utilizzando il seguente codice da http://www.aspsnippets.com/Articles/Export-GridView-to-Excel-in-ASPNet-with-Formatting-using-C-and-VBNet.aspx

Protected Sub ExportToExcel(sender As Object, e As EventArgs) 
    Response.Clear() 
    Response.Buffer = True 
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls") 
    Response.Charset = "" 
    Response.ContentType = "application/vnd.ms-excel" 
    Using sw As New StringWriter() 
     Dim hw As New HtmlTextWriter(sw) 

     'To Export all pages 
     GridView1.AllowPaging = False 
     Me.BindGrid() 

     GridView1.HeaderRow.BackColor = Color.White 
     For Each cell As TableCell In GridView1.HeaderRow.Cells 
      cell.BackColor = GridView1.HeaderStyle.BackColor 
     Next 
     For Each row As GridViewRow In GridView1.Rows 
      row.BackColor = Color.White 
      For Each cell As TableCell In row.Cells 
       If row.RowIndex Mod 2 = 0 Then 
        cell.BackColor = GridView1.AlternatingRowStyle.BackColor 
       Else 
        cell.BackColor = GridView1.RowStyle.BackColor 
       End If 
       cell.CssClass = "textmode" 
      Next 
     Next 

     GridView1.RenderControl(hw) 
     'style to format numbers to string 
     Dim style As String = "<style> .textmode { } </style>" 
     Response.Write(style) 
     Response.Output.Write(sw.ToString()) 
     Response.Flush() 
     Response.[End]() 
    End Using 
End Sub 

Public Overrides Sub VerifyRenderingInServerForm(control As Control) 
    ' Verifies that the control is rendered 
End Sub 

Excel (2013) si aprirà una finestra vuota, senza alcun avvertimento o un messaggio sul motivo per cui nulla è stato bloccato, e senza possibilità di accettare il file da aprire.

Il mio codice viene eseguito su un sito intranet e ho accesso a criteri di gruppo/impostazioni/configurazioni utente in Windows.

risposta

8

Soluzione 1

1) Aprire Excel andare su File Options

2) Fare clic su Centro -> Impostazioni Centro

3) Vai Visualizzazione protetta. ci sono 3 opzioni che mostrano che sono stati tutti cliccati. Deseleziona la prima opzione che dice "Abilita vista protetta per i file provenienti da Internet". In alcuni casi, come riportato nei commenti qui sotto sia il 1 ° e 2 ° opzioni devono essere deselezionata (Grazie @mosheb)

Soluzione 2

disinstallare questi aggiornamenti di Windows:

  • Windows Update KB3115262 (Excel 2013)
  • Windows Update KB3115130 (Excel 2010)
+1

Questo può essere applicato solo dall'utente all'altra estremità del tubo, e non tutti saranno disposti a prendere questo approccio. Per me, questa è una soluzione alternativa e non una soluzione. – Paul

+0

@Paul Onestamente l'unica vera soluzione che ho trovato è quella di non usare più questo blocco di codice. Se qualcuno può modificare questo codice e farlo funzionare, accetterò invece quella risposta. –

+0

@paul Ho inviato questo come uno stile Q/A per rispondere alla mia stessa domanda per condividere le mie conoscenze. Ho modificato la domanda nel tentativo di descrivere meglio la mia situazione e i tipi di accesso che ho sui miei utenti e il codice nell'ambiente intranet in cui questo viene eseguito. Questo mi è servito come soluzione per me data la mia situazione. –

3

Soluzione 3

  • Go nelle proprietà del file (R click - proprietà)
  • Fare clic su 'Sblocca'
  • Fare clic su 'Applica'
+0

Come per la soluzione accettata, questa può essere applicata solo dall'utente alla fine della pipe. Non la vedo davvero come una soluzione. – Paul

3

cambiare le opzioni di protezione non è stato, purtroppo, un'opzione, ma si scopre che se si esporta in CSV anziché in XLS, il file si aprirà in Excel ignorando le informazioni sul trust center.

Siamo in Classic ASP, quindi cambiamo pagina di esportare un formato tabella HTML per CSV e cambiato il nostro intestazione e ContentType a questo:

Response.AddHeader "content-disposition", "attachment; filename=search_results.csv" 
Response.ContentType = "text/csv" 

e la linea di fatto rompe con: Response.Write (chr(10))

+1

Il codice nella domanda applica qualche formattazione (impostazione backcolor) ma per le tue esigenze, e probabilmente molte altre, questa è un'ottima soluzione. Sono sicuro di avere alcuni posti in cui posso applicare questo (società al di fuori della nostra intranet in cui non possiamo semplicemente disinstallare gli aggiornamenti di Windows, ecc.) Grazie! –

+1

Come hai cambiato la tua pagina in output in .csv? Come test, ho preso un .xls che è stato emesso dal mio sito web, copiato e rinominato l'estensione in ".csv". Aprendo mostrava tutti i tag HTML ed era disordinato. Sto cercando di utilizzare questo formato .csv come soluzione a questo problema di finestra vuota di Excel all'apertura del documento durante l'esportazione in Internet Explorer, ma non sono sicuro di come modificare la mia esportazione Excel in .csv e non sembra orribile. – clamum

+0

@clamum Penso che tu abbia ragione, cambiare semplicemente l'output del tipo di contenuto non serve come soluzione. Penso che ci sia un bel po 'di modifiche al codice mancanti in questa risposta. Correggimi se sbaglio –

1

Ho solo pensato di menzionare una terza soluzione:

Aggiungere il sito che genera il file .xls all'elenco dei siti attendibili. Ho dovuto aggiungere circa una dozzina di siti web tramite GPO, perché il nostro CIO si rifiuta di ripristinare il KB ... = (

+1

Nulla viene implementato dall'utente finale, viene impostato a livello di dominio tramite i Criteri di gruppo – Raniel66

+0

Spiacenti, sì, sei corretto. Commento eliminato. – Paul

-1

Avendo lo stesso problema.Un aggiornamento ha bloccato l'esportazione in attività di Excel e non tutti i miei utenti in tutto il mondo hanno le autorizzazioni per sbloccare. Colpisce il 2010 e il 2013 .xls. Il mio pensiero è rivolto al tipo di contenuto. Hai provato a cambiare il tuo tipo di contenuto da application/vnd.ms-excel a application/vnd.openxmlformats-officedocument.spreadsheetml.sheet e usando xlsx invece?

+0

Ho provato e sto ricevendo "Impossibile leggere il file". da Excel e lo stesso excel vuoto arriva. –

+0

questa non è davvero una risposta tanto quanto un suggerimento e sembra che qualcuno abbia provato questo suggerimento e dice che non funziona. –

Problemi correlati