2016-07-19 16 views
6

Eine Methode zum Downloaden einer GridView in eine Excel-Datei zum Herunterladen/Öffnen aus dem Internet wurde kürzlich mit neuen Windows-Updates gebrochen.Öffnen von Excel-Dateien aus dem Internet öffnet ein leeres Excel-Fenster

Mein Code wird mit StringWriter, HTMLTextWriter und RenderControl von einer GridView in eine XLS-Datei geschrieben. Ein gemeinsamer Ansatz den folgenden Code aus 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) unter Verwendung öffnet in ein leeres Fenster, ohne Warnung oder Meldung an, warum alles blockiert war, und ohne Möglichkeit, die Datei zu akzeptieren, zu öffnen.

Mein Code wird auf einer Intranetsite ausgeführt, und ich habe Zugriff auf Gruppenrichtlinien/Einstellungen/Benutzerkonfigurationen in Windows.

Antwort

8

Lösung 1

1) Öffnen Sie Go Excel-Optionen Trust Center

2 in Datei) Klicken Sie auf -> Vertrauensstellungscenter

3) zu der geschützten Ansicht gehen. Es gibt 3 Optionen, die anzeigen, dass alle angeklickt wurden. Deaktivieren Sie die erste Option, die lautet - "Geschützte Ansicht für Dateien aus dem Internet aktivieren". In einigen Fällen, wie unten sowohl die 1. und 2. Optionen in den Kommentaren berichtet müssen nicht markiert (Danke @mosheb)

Lösung 2

Deinstallieren diese Windows-Updates sein:

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

Dies kann nur durch den Benutzer am anderen Ende des Rohres aufgebracht werden, und nicht jeder wird bereit sein, diesen Ansatz zu nehmen. Für mich ist dies eine einmalige Lösung und keine Lösung. – Paul

+0

@Paul Ehrlich gesagt ist die einzig wahre Lösung, die ich gefunden habe, diesen Code nicht mehr zu verwenden. Wenn jemand diesen Code ändern und es funktionieren lassen kann, werde ich stattdessen diese Antwort akzeptieren. –

+0

@paul Ich habe dies als Q/A-Stil eingereicht, um meine eigene Frage zu beantworten und mein Wissen zu teilen. Ich habe die Frage bearbeitet, um besser zu beschreiben, was meine Situation war und welche Arten von Zugriff ich über meine Benutzer und Code in der Intranet-Umgebung habe, in der diese läuft. Dies hat mir als Lösung für meine Situation gedient. –

3

Lösung 3

  • Gehen Sie in den Eigenschaften der Datei (R Klick - Eigenschaften)
  • Klicken Sie auf 'Freigeben'
  • Klicken Sie auf 'Übernehmen'
+0

Wie bei der akzeptierten Lösung kann dies nur vom Benutzer am Anforderungsende der Pipe angewendet werden. Ich sehe das nicht wirklich als eine Lösung. – Paul

3

die Sicherheitsoptionen zu ändern war leider nicht eine Option, aber es stellt sich heraus, dass wenn Sie in CSV statt XLS exportieren, dann wird die Datei in Excel geöffnet und ignoriert die Trust Center-Sachen.

Wir sind im klassischen ASP, so verändern wir die Seite vom Export eines HTML-Tabellenformat CSV und verändert unsere Kopf- und CONTENT dazu:

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

und tat Zeilenumbrüche mit: Response.Write (chr(10))

+1

Der Code in der Frage wendet einige Formatierungen an (Einstellung von Backcolor), aber für Ihre Anforderungen und wahrscheinlich viele andere ist dies eine großartige Lösung. Ich bin mir sicher, dass ich ein paar Stellen habe, an denen ich dies anwenden kann (Firmen außerhalb unseres Intranets, wo wir nicht einfach Windows-Updates deinstallieren können). Danke! –

+1

Wie haben Sie Ihre Seite für die Ausgabe in .csv geändert? Als Test nahm ich eine .xls-Datei, die von meiner Website ausgegeben wurde, kopierte sie und benannte die Erweiterung in ".csv" um. Beim Öffnen wurden alle HTML-Tags angezeigt und es sah unordentlich aus. Ich suche möglicherweise mit diesem .csv-Format als eine Lösung für dieses leere Excel-Fenster Problem beim Öffnen des Dokuments beim Export in Internet Explorer, aber ich bin mir nicht sicher, wie ich meinen vorhandenen Excel-Export zu .csv und nicht ändern habe es schrecklich aussehen. – clamum

+0

@clamum Ich denke, du hast Recht, nur die Inhaltsart Ausgabe ändern dient nicht als eine Lösung. Ich denke, dass bei dieser Antwort einige Codeänderungen fehlen. Korrigiere mich, wenn ich falsch liege. –

1

Nur gedacht, ich würde erwähnen, dass es eine dritte Lösung gibt:

Fügen Sie die Website, die die .xls erzeugt, in die Liste der vertrauenswürdigen Sites ein. Ich musste etwa ein Dutzend Websites über GPO hinzufügen, weil unser CIO es ablehnt, die KB zurückzusetzen ... = (

+1

Nichts wird vom Endbenutzer implementiert, es wird domänenweit durch Gruppenrichtlinien festgelegt – Raniel66

+0

Entschuldigung - ja, Sie haben Recht. Kommentar gelöscht. – Paul

-1

Mit demselben Problem.Ein Update hat diesen Export in Excel-Aktivitäten blockiert, und nicht alle meiner weltweiten Benutzer haben die Berechtigung zum Aufheben der Sperre. Es betrifft 2010 und 2013 .xls. Ich dachte, es soll den Inhaltstyp ansprechen. Haben Sie versucht, Ihren Inhaltstyp von application/vnd.ms-excel in application/vnd.openxmlformats-officedocument.spreadsheetml.sheet umzustellen und stattdessen xlsx zu verwenden?

+0

Ich habe es versucht und ich bekomme "Datei kann nicht gelesen werden." von Excel und gleichen Blanko kommt Excel. –

+0

das ist nicht wirklich eine Antwort so viel wie ein Vorschlag und es scheint, jemand versucht diesen Vorschlag und sagt, es funktioniert nicht. –