public class FileViewModel { public MemoryStream FileStream { get; set; } public string ContentType { get; set; } public string FileName { get; set; } } public ActionResult ExportToExcel() { var package = new ExcelPackage();//是一个epplus中的类 var worksheet = package.Workbook.Worksheets.Add("Sheet1");//Workbook 是 Excel 工作簿,Worksheets 是工作簿中的工作表集合 // 添加表头 cell代表表格或单元格 worksheet.Cells[1, 1].Value = "姓名"; worksheet.Cells[1, 2].Value = "年龄"; worksheet.Cells[1, 3].Value = "性别"; // 添加数据 worksheet.Cells[2, 1].Value = "张三"; worksheet.Cells[2, 2].Value = 20; worksheet.Cells[2, 3].Value = "男"; worksheet.Cells[3, 1].Value = "李四"; worksheet.Cells[3, 2].Value = 25; worksheet.Cells[3, 3].Value = "女"; // 自适应列宽 worksheet.Cells.AutoFitColumns(); // 导出 Excel 文件 var fileStream = new MemoryStream(package.GetAsByteArray()); var fileName = "export.xlsx"; var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; return View(new FileViewModel { FileStream = fileStream, ContentType = contentType, FileName = fileName }); }视图里面改、该如何写
时间: 2023-05-17 14:03:30 浏览: 90
对于这个问题,你可以在视图中使用 Razor 语法来输出文件流,如下所示:
@model FileViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@Model.FileName</title>
</head>
<body>
<a href="@Url.Action("ExportToExcel")">Download Excel</a>
</body>
</html>
在这个视图中,我们使用了 @model 指令来指定视图的模型类型为 FileViewModel。然后,我们使用 Razor 语法来输出文件流,如下所示:
<a href="@Url.Action("ExportToExcel")">Download Excel</a>
这个链接会调用 ExportToExcel 方法,并返回一个文件流。在这个方法中,我们创建了一个 ExcelPackage 对象,并向其中添加了一个工作表。然后,我们向工作表中添加了表头和数据,并自适应列宽。最后,我们将 Excel 文件导出为一个文件流,并将其包装在一个 FileViewModel 对象中,以便在视图中使用。
相关问题
public ActionResult ExportToExcel() { var package = new ExcelPackage();//是一个epplus中的类 var worksheet = package.Workbook.Worksheets.Add("Sheet1");//Workbook 是 Excel 工作簿,Worksheets 是工作簿中的工作表集合 // 添加表头 cell代表表格或单元格 worksheet.Cells[1, 1].Value = "姓名"; worksheet.Cells[1, 2].Value = "年龄"; worksheet.Cells[1, 3].Value = "性别"; // 添加数据 worksheet.Cells[2, 1].Value = "张三"; worksheet.Cells[2, 2].Value = 20; worksheet.Cells[2, 3].Value = "男"; worksheet.Cells[3, 1].Value = "李四"; worksheet.Cells[3, 2].Value = 25; worksheet.Cells[3, 3].Value = "女"; // 自适应列宽 worksheet.Cells.AutoFitColumns(); // 导出 Excel 文件 var fileStream = new MemoryStream(package.GetAsByteArray()); var fileName = "export.xlsx"; var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; return View(new FileViewModel { FileStream = fileStream, ContentType = contentType, FileName = fileName }); }@model该怎么写
您可以这样写:
public class FileViewModel
{
public MemoryStream FileStream { get; set; }
public string ContentType { get; set; }
public string FileName { get; set; }
}
public ActionResult ExportToExcel()
{
var package = new ExcelPackage();
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells[1, 1].Value = "姓名";
worksheet.Cells[1, 2].Value = "年龄";
worksheet.Cells[1, 3].Value = "性别";
worksheet.Cells[2, 1].Value = "张三";
worksheet.Cells[2, 2].Value = 20;
worksheet.Cells[2, 3].Value = "男";
worksheet.Cells[3, 1].Value = "李四";
worksheet.Cells[3, 2].Value = 25;
worksheet.Cells[3, 3].Value = "女";
worksheet.Cells.AutoFitColumns();
var fileStream = new MemoryStream(package.GetAsByteArray());
var fileName = "export.xlsx";
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return View(new FileViewModel { FileStream = fileStream, ContentType = contentType, FileName = fileName });
}
public object Deserialize(Stream serializationStream, HeaderHandler handler);
`Deserialize`方法是`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类中的一个方法,用于从指定的序列化流(`serializationStream`)中反序列化对象图,并可选地指定一个头部处理程序(`handler`)来处理头部信息。
具体参数说明如下:
- `serializationStream`:序列化流,即从中读取对象图进行反序列化的源流。
- `handler`:可选的头部处理程序,用于处理对象图中包含的头部信息。
方法返回一个反序列化的对象图。
下面是一个示例代码:
```csharp
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 创建一个包含头部信息的序列化流
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, new Person() { Name = "Tom", Age = 20 }, new[] { new Header("CustomHeader", "CustomHeaderValue") });
// 从序列化流中反序列化对象图,并处理头部信息
stream.Seek(0, SeekOrigin.Begin);
object obj = formatter.Deserialize(stream, (header, stream1) =>
{
Console.WriteLine($"Header name: {header.Name}, Value: {header.Value}");
return null;
});
// 输出反序列化的对象
Console.WriteLine(obj);
}
}
}
```
上面的示例创建了一个包含头部信息的序列化流,并通过`Deserialize`方法从流中反序列化对象图。在反序列化过程中,使用了一个头部处理程序,该程序会在处理每个头部信息时输出头部的名称和值。最后,示例输出了反序列化的对象。注意,在使用头部处理程序时,需要将流的位置设置为0,即`stream.Seek(0, SeekOrigin.Begin)`,以便从流的开头开始读取数据。