plik, który próbujesz otworzyć, jest w innym formacie niż określony przez rozszerzenie pliku w Asp.Net

Plik, który próbujesz otworzyć, jest w innym formacie, niż określony przez błąd rozszerzenia pliku c# podczas próby otwierania pliku w Excelu.

Oto Mój kod

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");

}

Kiedy próbuję otworzyć Excela dostaję ten błąd

Plik, który próbujesz otworzyć, jest w innym formacie niż określone przez rozszerzenie pliku

Tutaj wpisz opis obrazka

Po kliknięciu na tak plik otwiera się poprawnie. ale nie chcę, żeby ten msg się pojawił.

Author: Rahul Rajput, 2013-04-22

4 answers

Użyłem CloseXML do rozwiązania problemu.

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();
}

Zainstalowany ClosedXML w moim projekcie przy użyciu NuGet Package Manager.

 21
Author: Rahul Rajput,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 20:39:04

Plik, który próbujesz otworzyć, jest w innym formacie niż określone przez rozszerzenie pliku

Ciągle otrzymujesz ten Komunikat ostrzegawczy, ponieważ utworzony plik nie jest rzeczywistym plikiem excel. Jeśli przyjrzysz się wygenerowanemu plikowi, to tylko kilka tagów html. Pamiętaj, że RenderControl GridView wygeneruje tabelę html.

Aby rozwiązać problem, musisz użyć narzędzia innej firmy, które tworzy prawdziwy plik excel (jedno narzędzie można użyć is npoi) lub utworzyć plik rozdzielany przecinkami lub po prostu plik csv i zwrócić ten plik.

 5
Author: von v.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-22 12:27:50

Na wypadek, gdyby ktoś inny natknął się na to... Musiałem konwertować bloby z powrotem do plików w locie w C#. Pdf działa dobrze i excel dał mi ten sam błąd co OP wyjaśnia.

To jest kod, który napisałem, który obsługuje Excela inaczej niż inne typy plików.

Podanie aplikacji excel / octet-stream z rzeczywistą nazwą pliku rozwiązało mój problem. Prawdopodobnie nie jest to najczystszy sposób, ale był wystarczająco dobry dla moich celów.

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
Author: Mike Wallace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-18 17:34:11

W przypadku, gdy ktoś musi wyeksportować zbiór danych jako plik excel za pomocą 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
Author: dvdmn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-20 13:26:57