簡體   English   中英

ASP.NET MVC Excel導出文件格式錯誤

[英]ASP.NET MVC Excel export file format error

我目前正在編寫ASP.NET MVC 5控制器操作以將一些數據導出到Excel文件(使用我在此處找到的一些代碼)。 它主要起作用。 它輸出一個Excel文件,我可以打開,但不會在顯示以下錯誤消息之前:

“'Export.xls'的文件格式和擴展名不匹配。文件可能已損壞或不安全。除非您信任它的來源,否則請不要打開它。無論如何要打開它嗎?”

我繼續選擇“是”,然后打開。 我可以在我的機器上重新保存並打開該文件,但我沒有收到錯誤。 它可以正常工作,唯一的另一個奇怪的是文件的網格線格式與Excel文件的格式不同,幾乎更像HTML表而不是Excel表。 但是,奇怪的錯誤消息不是可以接受的,所以我必須解決它。

這是我的代碼:

public void ExportExcel()
{
    // DataObject is a class that fetches the data for this method
    DataObject dataObj = new DataObject();
    var grid = new GridView();

    // dataObj.GetDataList returns a List<T> of data model class objects
    grid.DataSource = dataObj.GetDataList();
    grid.DataBind();

    Response.ClearContent();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment; filename=Export.xls");
    Response.ContentType = "application/vnd.ms-excel";
    Response.Charset = "";

    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);

    grid.RenderControl(htw);

    byte[] byteArray = Encoding.ASCII.GetBytes(sw.ToString());
    MemoryStream s = new MemoryStream(byteArray);
    StreamReader sr = new StreamReader(s, Encoding.ASCII);

    Response.Write(sr.ReadToEnd());
    Response.End();

}

我已經嘗試將Response.ContentType設置為其他值(“application / excel”,“application / ms-excel”),但無濟於事。 我對ASP.NET和C#一般都是新手,因此可能會有一些我在這里缺少或做錯的事情; 我更習慣PHP和Zend。 您將給予的任何見解或幫助將不勝感激; 謝謝!

您正在將HTML表格編寫為Excel文件。 基本上,你正在用這個文字:

<table>
    <tr>
        <td>
            Stuff
       </td>
    </tr>
</table>

並將其寫為擴展名為.xls的文本文件。 Excel足夠“智能”(如果你可以稱之為)打開文件並正確顯示它,雖然它會提醒你文件實際上不是xls文件。

您需要處理它(不是一個好的解決方案),將表中的數據轉換為csv並發送CSV(一個更好的解決方案)或使用Excel庫創建一個實際的Excel文件並發送它。 其中,CSV可能是最簡單的。

我得到了同樣的錯誤。 所以,我開始(使用Microsoft.Office.Interop.Excel)從Nuget Manager獲取它。

Here is the code

 Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();

 Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
                Worksheet ws = (Worksheet)xla.ActiveSheet;       

/ *標題在這里* /

   ws.Cells[1, 1] = "Header1";
            ws.Cells[1, 2] = "Header2"; ws.Cells[1, 3] = "Header3"; ws.Cells[1, 4] = "Header4"; ws.Cells[1, 5] = "Header5";

            int i = 2;

/ *使用此處的列表填充數據行* /

            foreach (var a in pavmm.Funds)
            {
                ws.Cells[i, 1] = a.FilingID;
                ws.Cells[i, 2] = a.Security_Name; ws.Cells[i, 3] = a.Filing_Type; ws.Cells[i, 4] = a.st_name; ws.Cells[i, 5] = a.Permit;

                i = i + 1;
            }
            ws.Columns.AutoFit();
            ws.Rows.AutoFit();


        string folder = NewFolderName + "\\";
            if (!Directory.Exists(folder))
                Directory.CreateDirectory(folder);


            string filename =  ExcelsheetName + ".xlsx";
            filename = filename.Replace('/', '-');
            filename = filename.Replace('\\', '-');
            string path = Path.Combine(folder, filename);
            wb.SaveCopyAs(path);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM