[英]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.