C# 在浏览器中打开Excel文件时未调用Excel
我正在调用一个函数来返回Excel文件,但它并没有在Excel中打开,而是在浏览器中打开另一个选项卡。以下是我的看法:C# 在浏览器中打开Excel文件时未调用Excel,c#,excel,asp.net-mvc-4,C#,Excel,Asp.net Mvc 4,我正在调用一个函数来返回Excel文件,但它并没有在Excel中打开,而是在浏览器中打开另一个选项卡。以下是我的看法: @model InventoryControl.Models.AdminModel <div> @if (Model.TableCounts != null) { <table class="table_body"> <tr> <th>@Html.DisplayNameFor(
@model InventoryControl.Models.AdminModel
<div>
@if (Model.TableCounts != null)
{
<table class="table_body">
<tr>
<th>@Html.DisplayNameFor(x=>x.TableCountModel.TableName)</th>
<th>@Html.DisplayNameFor(x=>x.TableCountModel.Rows)</th>
<th>@Html.DisplayNameFor(x=>x.TableCountModel.Count)</th>
<th>@Html.DisplayNameFor(x=>x.TableCountModel.Size)</th>
</tr>
@foreach (var item in Model.TableCounts)
{
<tr>
<td>
@item.TableName
</td>
<td>
@item.Rows
</td>
<td>
@item.Count
</td>
<td>
@item.Size
</td>
</tr>
}
</table>
}
else
{
<p><i>No data available</i></p>
}
</div>
<div>
@Html.ActionLink("Excel", "Excel")
</div>
我徒劳地寻找了一个有效的例子,却找不到有效的例子
如果我进行此更改:
Response.AddHeader("Content-Dispositon", "attachment; filename=TableCounts.xlsx");
Response.ContentType = "application/vnd.ms-excel";
“文件保存/打开”对话框已启动,但显示为Excel 2003格式,文件名为“Excel”。请检查默认程序以打开csv文件,并将其设置为Excel。您的代码不会创建Excel文件,而是创建csv文件。内容类型也不是特定于Excel的。浏览器可能会决定Excel是否是打开此文本文件的适当应用程序 即使浏览器选择Excel,打开文件也可能失败,例如,如果客户端的区域设置使用
,
作为十进制分隔符。这在欧洲国家很常见。在这种情况下,Excel expect
作为字段分隔符,可以作为单个文本块打开CSV
与其试图欺骗浏览器在Excel中打开CSV,不如使用类似的库创建一个真正的Excel文件。EPPlus是一个可用的软件包,因此很容易将其添加到您的项目中
该库的文档包含关于如何在Web应用程序中使用它的详细信息。从示例中删除格式化代码后,代码非常简单:
private void DumpExcel(DataTable tbl)
{
using (ExcelPackage pck = new ExcelPackage())
{
//Create the worksheet
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");
//Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
ws.Cells["A1"].LoadFromDataTable(tbl, true);
//Write it back to the client
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
}
}
Excel文件是压缩的,这意味着将文件发送到客户端会快得多,特别是对于大型文件CSV文件不是Excel文件。客户端的计算机没有理由使用Excel来读取它,除非Excel是默认的程序。@PanagiotisKanavos-true,但大多数都在这里。我的是这样设置的,它不会在excel中打开。我的是这样设置的,它不会在excel中打开。我已将该包添加到我的项目中,我的控制器无法识别该excel包-我应该包括什么?使用OfficeOpenXml添加
代码>
private void DumpExcel(DataTable tbl)
{
using (ExcelPackage pck = new ExcelPackage())
{
//Create the worksheet
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");
//Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
ws.Cells["A1"].LoadFromDataTable(tbl, true);
//Write it back to the client
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
}
}