it-swarm.com.de

Die Datei, die Sie öffnen möchten, weist ein anderes Format auf als von der Dateierweiterung in Asp.Net angegeben

die Datei, die Sie öffnen möchten, hat ein anderes Format als das, das durch den Fehler mit der Dateierweiterung c # beim Öffnen der Datei in Excel angegeben wurde.

Hier ist mein Code

public ActionResult Export(string filterBy)
{
    MemoryStream output = new MemoryStream();
    StreamWriter writer = new StreamWriter(output, Encoding.UTF8);

    var data = City.GetAll().Select(o => new
    {
        CountryName = o.CountryName,
        StateName = o.StateName,
        o.City.Name,
        Title = o.City.STDCode
    }).ToList();
    var grid = new GridView { DataSource = data };
    grid.DataBind();
    var htw = new HtmlTextWriter(writer);

    grid.RenderControl(htw);

    writer.Flush();
    output.Position = 0;

    return File(output, "application/vnd.ms-Excel", "test.xls");

}

wenn ich versuche, Excel zu öffnen, erhalte ich diese Fehlermeldung

die Datei, die Sie versuchen, zu öffnen ist in einem anderen Format als durch die Dateierweiterung angegeben

enter image description here

Nach einem Klick auf Ja wird die Datei korrekt geöffnet. aber ich möchte nicht, dass diese Meldung erscheint.

18
Rahul Rajput

Ich habe CloseXML verwendet, um das Problem zu lösen.

public static void ExportToExcel(IEnumerable<dynamic> data, string sheetName)
{
    XLWorkbook wb = new XLWorkbook();
    var ws = wb.Worksheets.Add(sheetName);
    ws.Cell(2, 1).InsertTable(data);
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    HttpContext.Current.Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx",sheetName.Replace(" ","_")));

    using (MemoryStream memoryStream = new MemoryStream())
    {
        wb.SaveAs(memoryStream);
        memoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
        memoryStream.Close();
    }

    HttpContext.Current.Response.End();
}

Installierte ClosedXML in meinem Projekt mit Nuget Package Manager .

23
Rahul Rajput

die Datei, die Sie versuchen, zu öffnen ist in einem anderen Format als durch die Dateierweiterung angegeben

Diese Warnmeldung wird ständig angezeigt, da es sich bei der erstellten Datei nicht um eine tatsächliche Excel-Datei handelt. Wenn Sie sich die generierte Datei ansehen, handelt es sich nur um eine Reihe von HTML-Tags. Denken Sie daran, dass das RenderControl eines GridView eine HTML-Tabelle generiert.

Um Ihr Problem zu beheben, müssen Sie entweder ein Tool eines Drittanbieters verwenden, das eine echte Excel-Datei erstellt (ein Tool, das Sie möglicherweise verwenden möchten, ist NPOI ) oder create Eine durch Kommas getrennte Datei oder einfach eine CSV-Datei, und geben Sie diese Datei zurück.

5
von v.

Für den Fall, dass jemand anderes darüber stolpert ... Ich musste Blobs in C # sofort wieder in Dateien konvertieren. PDFs funktionierten gut und Excel gab mir den gleichen Fehler wie OP erklärt.

Dies ist der von mir geschriebene Code, der Excel anders behandelt als andere Dateitypen.

Die Angabe einer Excel-Anwendung/eines Oktett-Streams mit einem tatsächlichen Dateinamen löste mein Problem. Wahrscheinlich nicht der sauberste Weg, es zu tun, aber es war gut genug für meine Zwecke.

string theExt = Path.GetExtension(theDoc.documentFileName).ToUpper();

Response.Clear();

if (theExt == ".XLS" || theExt == ".XLSX"){
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", theDoc.documentFileName));
    }
else{
    Response.ContentType = theDoc.documentMimeType;
    Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", theDoc.documentTitle));
}

using (MemoryStream stream = new MemoryStream(theDoc.file))
{
    stream.WriteTo(Response.OutputStream);
    stream.Close();
};

Response.End();
4
Mike Wallace

Für den Fall, muss jemand einen Datensatz als Excel-Datei exportieren mit CloseXML .

Dataset ds = { your data from db }
var xlsx = new XLWorkbook();
var dataTable = ds.Tables[0];

xlsx.Worksheets.Add(dataTable);

xlsx.SaveAs("export.xlsx");
2
dvdmn