ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

Letzter Beitrag 03-31-2010, 12:25 von Stefan Falz. 9 Antworten.
Beiträge sortieren: Zurück Weiter
  •  02-23-2010, 10:21 216133

    Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hi. Ich versuche ein Excel File zu öffnen. Hab schon eine Menge gegoogelt und auch auf einigen eine Lösung gefunden und zwar diese:

    string name = Session["FileName"].ToString();
            string path = Session["FilePath"].ToString();
            Response.ContentType = "Application/x-msexcel"
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + name.Replace("'",""));
            FileInfo fileInfo = new FileInfo(@path);
            //Response.WriteFile(path, 0 ,fileInfo.Length);
            Response.TransmitFile(path);
            Response.End();

    Diese Lösung hat vor ein paar Wochen auch funktioniert, aus einem merkwürdigen Grund jetzt aber nicht mehr. Es kommt keine Fehlermeldung oder der gleichen, das Fenster öffnet sich und schließt sich sofort wieder...

    Hoffe ihr könnt mir helfen, habe diesen Fehler leider nicht durch google lösen können. Btw, dieses Verhalten passiert auf meinem Lokalen Rechner wie auch am Server wo diese Seite laufen soll.

    Mfg UnKnOwN_86

  •  02-23-2010, 10:41 216136 Antwort zu 216133

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Okay....

    Es reinem Interessem Drang, habe ich es mal mit dem FireFox getestet und es funktioniert dort.

    Ich habe ehrlich gesagt keine Ahnung was ich in den letzten Tagen an meinem IE8 geändert haben soll, dass er dies nicht mehr öffnen will. Ich hoffe ihr könnt mir helfen, dieses anscheinende IE8 (oder vielleicht auch andere IEs) Problem zu lösen.

    Falls ihr bestimmte Einstellungen von meinem IE8 wissen müsst fragt mich, ich habe keine Ahnungen welche Einstellugen dies beeinflussen könnten.

    Mfg UnKnOwN_86

  •  02-23-2010, 11:59 216142 Antwort zu 216136

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    So.. Nach einigen ausprobieren habe ich den Übeltäter entlarvt, und zwar ist es folgende Einstellung:

    "Automatische Eingabeaufforderung für Dateidownloads" in den Sicherheitszonen, diese ist standardmäßig deaktiviert.

    Nun ist es mögliche eine "Manuelle Eingabeaufforderung" durchzuführen, also dass ich per Code den Save/Open-Dialog erzwinge?!?

    Oder gibt es eine Möglichkeit diese Einstellung per Code auf aktiviert zu setzten?!?

    Hoffe ihr könnt mir helfen.

    Mfg UnKnOwN_86

  •  02-23-2010, 12:08 216145 Antwort zu 216142

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hi,
    UnKnOwN_86:

    "Automatische Eingabeaufforderung für Dateidownloads" in den Sicherheitszonen, diese ist standardmäßig deaktiviert.

    Nun ist es mögliche eine "Manuelle Eingabeaufforderung" durchzuführen, also dass ich per Code den Save/Open-Dialog erzwinge?!?

    Oder gibt es eine Möglichkeit diese Einstellung per Code auf aktiviert zu setzten?!?


    Serverseitig kannst Du da gar nichts machen. Allerdings wundert es mich schon ein wenig, dass das nicht funktionieren soll, dann dürfte ja gar kein Download mehr klappen.

    Was passiert denn, wenn Du mal den Content-Type auf "application/vnd.ms-excel" setzt? Falls das noch nichts hilft, probier mal "inline" anstelle von "attachment" bei Content-Disposition.


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  02-23-2010, 13:32 216152 Antwort zu 216145

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hab beides aus probiert und funktioniert leider nicht. :(

    Normale Downloads (also Downloads von irgendwelchen seiten) funktionieren, hab auch versuchte die Seite in die Vertrauenswürdigen Sites hizuzufügen, und der Download hat dennoch gestartet.

    Ich habe folgendes nun im Internet gefunden:



    using Microsoft.Win32;

            try
            {
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\Components", "GeneralFlags", "0", RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0", "2200", "0", RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1", "2200", "0", RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2", "2200", "0", RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", "2200", "0", RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4", "2200", "0", RegistryValueKind.DWord);
            }
            catch {}

    Dies setzt die Einstellung auf aktiviert für alle Zonen, für den Fall der User ist nicht in der richtigen Zone.

    Es ist nicht wirklich eine gute Lösung, suche mehr nach einer Lösung ohne Registry Einträge zu ändern, aber dies funktioniert sogar am Server auf lokalen Rechner (also Server liegt WebPage und ändert LokaleEinstellungen, ohne Rücksprache mit dem User - Sicherheit gleich 0)

     

     

    Edit:

    Desweiteren, funktiont der Download auf der selben Seite auch ohne Probleme, wenn ich beim ReportViewer Export to Excel mache kommt auch der Save/Open Dialog, ohne dass ich die Einstellugen geändert habe. Also müsste es eine Möglichkeit geben diesen zu erzwingen, denn wie schaffst es ReportViewer wenn es nicht ginge, ist auch nur ein simpler Datei Download.

  •  03-26-2010, 13:07 216615 Antwort zu 216152

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hi.

    Das Problem ist leider nicht 100% gelöst, wie man sich vielleicht hätte denken können, funktioniert das ganze nur mit admin usern.

    Ich hoffe ihr könnt mir helfen.

  •  03-28-2010, 20:29 216620 Antwort zu 216615

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hat keiner ein Lösung für dieses Problem. :(

    Kann doch eigentlich nicht so schwer sein möchte doch nur eine Excel-Datei öffnen, und dabei den Speichern/Öffnen/Abbrechen Dialog bekommen.

    :(

  •  03-28-2010, 20:42 216621 Antwort zu 216620

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hi,
    UnKnOwN_86:

    Hat keiner ein Lösung für dieses Problem. :(

    Kann doch eigentlich nicht so schwer sein möchte doch nur eine Excel-Datei öffnen, und dabei den Speichern/Öffnen/Abbrechen Dialog bekommen.

    :(


    das Problem dabei ist, dass irgendwas auf deinem Rechner nicht zu stimmen scheint. Wenn ich das hier nachstelle, erhalte ich den "Speichern unter" Dialog.

    Probier mal bitte, das ganze in einem Handler zu machen. Du hast das wohl in einer Webform oder einem UserControl, oder?

    Imports System.Web
     
    Public Class ExcelDownload
     
        Implements System.Web.IHttpHandler
     
        Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
     
            context.Response.Clear()
            context.Response.ContentType = "application/vnd.ms-excel"
            context.Response.AddHeader( "Content-Disposition", "inline;filename=test.xls" )
            context.Response.TransmitFile( context.Server.MapPath( "~/App_Data/test.xls" ) )
            context.Response.End()
     
        End Sub
     
        ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
     
    End Class

    Obiges ist der Code des Handlers (allerdings VB, übersetzen darfst Du dann selbst :)


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  03-29-2010, 9:58 216630 Antwort zu 216621

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hi.

    Also an meinem Pc kann es nicht liegen. Das die Registry nicht immer funktioniert hab ich erst erfahren, als mich mein Chef aus Russland angerufen hat, und fragte warum dies nicht funktioniert... Dann habe ich die Einstellung manuell durch geführt und es funktionierte.

    Zur Zeit funktioniert es bei mir so:

    EditExcel.aspx
       

    void btn_click()
    {
     Excel.Application oXL;
                Excel._Workbook oWB;
                Excel._Worksheet oSheet;

                oXL = new Excel.Application();
                oWB = oXL.Workbooks.Add(Server.MapPath(@"~\Excel\Vorlage.xls"));
                oSheet = (Excel.Worksheet)oWB.ActiveSheet;

                // Excel ansprechen, Cells[0,0].... und soweiter

                if (File.Exists(Server.MapPath(@"~\Excel\" + name)))
                    File.Delete(Server.MapPath(@"~\Excel\" + name));

                oWB.SaveAs(Server.MapPath(@"~\Excel\" + name), Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                oWB.Close(Excel.XlSaveAction.xlSaveChanges, Server.MapPath(@"~\Excel\" + name), Type.Missing);
                oXL.Quit();

                oSheet = null;
                oWB = null;
                oXL = null;
                GC.Collect();

                Session["FileName"] = name;
                Session["FilePath"] = Server.MapPath(@"~\Excel\" + name);
                ScriptManager.RegisterStartupScript(this, this.GetType(), "LoadExcel", "window.open(\"../xyz/OpenExcel.aspx\", \"mywindow\");", true);
    }


    OpenExcel.aspx (Normale WebPage - im Aspx file ist nichts ausser die Standard sachen, und die PageLoad schaut wie folgt aus, sonst ist NICHTS auf der Page)
        protected void Page_Load(object sender, EventArgs e)
        {
            string name = Session["FileName"].ToString();
            string path = Session["FilePath"].ToString();
            Response.ContentType = "application/vnd.ms-excel";
            Response.AppendHeader("Content-Disposition", "inline; filename=" + name.Replace("'", ""));
            FileInfo fileInfo = new FileInfo(@path);
            //Response.WriteFile(path, 0 ,fileInfo.Length);
            Response.TransmitFile(path);
            Response.End();
        }

     

    Den Handler umschreiben dürfte kein Problem sein, nur wo gehört der nun genau hin?!? In mein OpenExcel.aspx anstatt dem PageLoad oder gehört das in ne eigene .cs Datei die in dann aufrufe?!?

  •  03-31-2010, 12:25 216658 Antwort zu 216630

    AW: Excel öffnen mit Asp.Net (Fenster öffnet und schließt sich, ohne geschehnis)

    Hi,
    UnKnOwN_86:

    Also an meinem Pc kann es nicht liegen. Das die Registry nicht immer funktioniert hab ich erst erfahren, als mich mein Chef aus Russland angerufen hat, und fragte warum dies nicht funktioniert... Dann habe ich die Einstellung manuell durch geführt und es funktionierte.

    Ein generelles Problem seitens des Frameworks kanns auch nicht sein. Und dass sowas nur als Admin funzen soll, hab ich auch noch nie gehört.

    UnKnOwN_86:

    Zur Zeit funktioniert es bei mir so:

    EditExcel.aspx
       

    void btn_click()
    {
     Excel.Application oXL;
                Excel._Workbook oWB;
                Excel._Worksheet oSheet;

                oXL = new Excel.Application();


    Oh, sehr böse[TM] Falle. Excel hat auf einem Webserver nichts, aber auch gar nichts verloren. Das wiederum kann natürlich ein Problem werden. Wenn Du lediglich Daten lesen/aktualisieren willst, dürfte OleDb mit der Jet Engine völlig ausreichen, wenns mehr sein muss, empfiehlt sich eine Komponente wie bspw. Aspose.Cells. Excel selbst solltest Du, wie schon gesagt, definitiv nicht in einer Webanwendung verwenden, das bringt eigentlich nur Probleme mit sich, angefangen von Zombieprozessen bis hin zu einem instabilen System.

    Den generischen Handler legst Du separat an (hat die Endung .ashx). In deinem Fall gibt in der Webform bspw. das Problem, dass Response.Clear nicht ausgeführt wird, damit wird die HTML Deklaration ebenfalls mit ausgegeben, was dazu führt, dass die Exceldatei eben für den Client keine Exceldatei mehr ist. Bei einem Handler hast Du den Overhead einer Webform nicht und zusätzlich bessere Kontrolle über das, was effektiv an den Client ausgeliefert wird.


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)