Avatar billede baddaydaddy Nybegynder
09. december 2008 - 16:46 Der er 2 kommentarer og
1 løsning

SaveFileDialog fra en nylig oprettet excel-fil (StreamWriter)

Jeg har fundet noget kode på internet til at åbne en SaveFileDialog i en browser så man kan give brugeren mulighed for at vælge hvor han vil gemme sin fil. Dette fungerer ikke, da det der bliver genereret er et resultat af INDHOLDET på siden i stedet for den nylig oprettede excel-fil. Kan nogen fortælle mig hvad der er forkert og hvorfor det ikke er filen den åbner?

StreamWriter oStreamWriter = System.IO.File.CreateText(Server.MapPath("~/excelfile.xls"));

try
{
    foreach (Person item in PersonCollection)
    {
        oStreamWriter.WriteLine(item.PersonID + "\t" +
            item.Fornavne + "\t" +
            item.Efternavne + "\t" +
            item.Address + "\t" +
            item.Postnummer);
    }

    ******* SÅ LANGT FUNGERER KODEN, DA JEG KAN SE AT FILEN DER BLIVER LAVET PÅ SERVEREN ER KORREKT ********

    string sFilePath = Server.MapPath("~/excelfile.xls");
    Response.Buffer = false;
    Server.ScriptTimeout = 30000;
    Page.Response.ClearHeaders();
    Response.ContentType = "application/excel";
    Response.AddHeader("Content-Disposition", "attachment; filename=excelfile.xls");

    FileStream fsDownload = File.OpenRead(sFilePath);
    byte[] buffer = new byte[1024];
    long bytecount;
    long fileSize = fsDownload.Length;
    Response.AddHeader("Content-Length", fileSize.ToString());

    while ((bytecount = fsDownload.Read(buffer, 0, buffer.Length)) > 0)
        if (Response.IsClientConnected)
        {
            Response.OutputStream.Write(buffer, 0, buffer.Length);
            Response.Flush();
        }

    fsDownload.Close();
    Response.End();

}
catch (Exception ex)
{ }
finally
{
    oStreamWriter.Close();
}


Hvis denne kode er korrekt og jeg har misforstået hvordan den skal fungere vil jeg gerne have input på hvordan jeg får åbnet den ny-oprettede excelfil på andet sæt.
Avatar billede baddaydaddy Nybegynder
12. december 2008 - 10:43 #1
ingen der har nogen idé om hvordan jeg kan gøre dette??
Avatar billede karl-koder Nybegynder
23. december 2008 - 08:08 #2
Jeg har med success brugt nedenstående kode til det du gerne vil udføre :

private void DownloadFile(string fname, bool forceDownload)
{
    string path = MapPath(fname);
    string name = Path.GetFileName(path);
    string ext = Path.GetExtension(path);
    string type = "";
    // Sætter kendte typer baseret på fil extension 
    if (ext != null)
    {
        switch (ext.ToLower())
        {
            case ".htm":
            case ".html":
                type = "text/HTML";
                break;

            case ".txt":
                type = "text/plain";
                break;
            case ".doc":
            case ".rtf":
                type = "application/msword";
                break;
            case ".xls":
            case ".csv":
                type = "application/vnd.ms-excel";
                break;
        }
    }
    if (forceDownload)
    {
        Response.AppendHeader("content-disposition",
            "attachment; filename=" + name);
    }
    if (type != "")
        Response.ContentType = type;
    Response.WriteFile(path);
    Response.End();
}
Avatar billede baddaydaddy Nybegynder
23. december 2008 - 09:06 #3
Jeg har allerede fået løst problemet for en uge siden:

Response.ContentType = "application/excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=excelfile.xls");

Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.WriteFile(Server.MapPath("~/excelfile.xls"));

Response.End();
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester