Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)

Sure!

前言

在Web开发中,我们经常会遇到需要生成Excel文件并提供下载的需求。ASP.NET提供了丰富的接口和库来支持Excel文件的生成和操作。本文将介绍如何通过ASP.NET生成Excel文件,并提供下载链接。

准备工作

在进行生成Excel文件的操作前,需要安装并引用一些库文件:

  1. EPPlus:一款开源的Excel处理库,支持Excel 2007及以上版本的文件操作,包括写入、读取、格式化等,NuGet包名称为EPPlus
  2. Microsoft.AspNet.WebApi.Core:ASP.NET WebApi核心库,NuGet包名称为Microsoft.AspNet.WebApi.Core

可以使用NuGet Package Manager直接安装,也可以手动下载并安装。

生成Excel文件代码示例

在准备工作完成后,接下来我们就可以编写生成Excel文件的代码了。

public class ExcelController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Download()
    {
        // 创建Excel文件
        var file = new FileInfo(@"C:\Sample.xlsx");
        using (var package = new ExcelPackage(file))
        {
            // 添加工作表
            var worksheet = package.Workbook.Worksheets.Add("Sample");

            // 设置单元格内容和格式
            worksheet.Cells[1, 1].Value = "ID";
            worksheet.Cells[1, 2].Value = "Name";
            worksheet.Cells[1, 3].Value = "Age";
            worksheet.Cells[1, 4].Value = "Gender";
            worksheet.Cells[1, 1, 1, 4].Style.Font.Bold = true;

            worksheet.Cells[2, 1].Value = "1";
            worksheet.Cells[2, 2].Value = "张三";
            worksheet.Cells[2, 3].Value = "23";
            worksheet.Cells[2, 4].Value = "男";

            worksheet.Cells[3, 1].Value = "2";
            worksheet.Cells[3, 2].Value = "李四";
            worksheet.Cells[3, 3].Value = "25";
            worksheet.Cells[3, 4].Value = "女";

            worksheet.Cells.AutoFitColumns();
            worksheet.DefaultColWidth = 20;

            // 保存Excel文件
            package.Save();
        }

        // 获取文件内容
        var stream = new MemoryStream();
        using (var fileStream = new FileStream(@"C:\Sample.xlsx", FileMode.Open, FileAccess.Read))
        {
            fileStream.CopyTo(stream);
        }
        stream.Position = 0;

        // 创建响应
        var response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StreamContent(stream)
        };
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "Sample.xlsx"
        };

        return response;
    }
}

以上代码演示了如何生成一个包含数据的Excel文件,并将其保存到文件中。接下来,我们将该文件内容放到MemoryStream中,并响应给客户端。

关键点说明:

  1. 通过创建ExcelPackage对象,可以方便地操作Excel文件,进行单元格数据的添加、格式化等操作。
  2. 创建HttpResponseMessage对象,将文件内容放到其Content属性中即可。

下载Excel文件代码示例

上面的代码演示了如何生成Excel文件,而接下来,我们需要将其提供给客户端进行下载。

public class DownloadController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Get(string fileName)
    {
        var filePath = Path.Combine(@"C:\Downloads", fileName);

        if (!File.Exists(filePath))
        {
            return new HttpResponseMessage(HttpStatusCode.NotFound);
        }

        var stream = new MemoryStream();
        using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            fileStream.CopyTo(stream);
        }
        stream.Position = 0;

        var response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StreamContent(stream)
        };
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = fileName
        };

        return response;
    }
}

以上代码演示了如何提供Excel文件的下载链接。其中,查询参数中的fileName参数指定下载的文件名。

关键点说明:

  1. ContentType的值根据文件类型进行设置,Excel文件的类型为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  2. ContentDisposition属性用于设置下载的文件名。

疑难问题解决

使用迅雷下载时,会下载到页面而不是Excel文件。

问题分析:可能是由于响应中的ContentType不正确所致。

解决方案:将响应中的ContentType设为application/octet-stream 即可:

var response = new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StreamContent(stream)
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = fileName
};

以上就是本文介绍的生成Excel文件并提供下载的方法和示例代码。希望对大家有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题) - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C# 服务器发送邮件失败实例分析

    让我来详细讲解一下“C#服务器发送邮件失败实例分析”的完整攻略。 问题描述 首先,我们需要明确问题的描述,即C#服务器发送邮件失败的具体表现。通常会出现以下几种情况: 邮件无法发送,没有任何错误提示。 邮件发送失败,返回错误提示信息。 邮件发送成功,但是收件人没有收到邮件。 常见问题排查步骤 接下来,我们需要分析问题并排查原因。常见的问题排查步骤包括: 检查…

    C# 2023年5月14日
    00
  • ASP.NET Core MVC中的标签助手(TagHelper)用法

    ASP.NET Core MVC 中的标签助手(TagHelper)用法 在 ASP.NET Core MVC 中,标签助手(TagHelper)是一种非常有用的工具,可以帮助开发人员更轻松地创建 HTML 标记。本攻略将详细介绍 ASP.NET Core MVC 中的标签助手用法,并提供多个示例说明。 步骤一:创建标签助手 在 ASP.NET Core M…

    C# 2023年5月17日
    00
  • 如何在C#中使用注册表

    当我们需要在程序中保存一些配置信息,或者获取系统设置时,可以使用注册表来存储和读取这些信息。在C#中,我们可以利用Microsoft.Win32命名空间提供的类来操作注册表。 1. 引用命名空间 在使用注册表之前,首先需要引用Microsoft.Win32命名空间。可以在文件头部使用using语句引入命名空间: using Microsoft.Win32; …

    C# 2023年5月31日
    00
  • C#调用系统API指定快捷键的方法

    下面是详细的讲解“C#调用系统API指定快捷键的方法”的完整攻略。 1. 确定快捷键 在使用系统API指定快捷键之前,我们需要先确定需要指定的快捷键。快捷键通常由按键、修饰键(如Ctrl、Alt、Shift等)和热键消息(如WM_HOTKEY)组成。其中,按键可以是任意一个普通按键(如字母、数字、符号等),修饰键可以是Ctrl、Alt、Shift或这些修饰键…

    C# 2023年6月7日
    00
  • vb.net与c#相互转换工具 网站地址列表

    下面就来详细讲解一下“vb.net与c#相互转换工具 网站地址列表”的完整攻略。 网站介绍 “vb.net与c#相互转换工具 网站地址列表”是一个旨在帮助开发者快速转换vb.net代码与c#代码的在线工具网站。它提供了vb.net代码转换成c#代码、c#代码转换成vb.net代码两种功能。 使用说明 转换方式 在网站的主页中,用户可以选择在“VB.NET代码…

    C# 2023年6月3日
    00
  • C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码

    如何判断C# WinForm程序是否已经在运行,且只允许运行一个实例是一个比较常见的问题,可以通过以下几个步骤来解决: 1.通过进程判断是否已经存在实例 可以通过进程名或进程ID来判断是否已经存在了实例。以下是代码示例: using System.Diagnostics; bool isRunning = false; string currentProce…

    C# 2023年6月7日
    00
  • C#实现单链表(线性表)完整实例

    为了更好的阐述“C#实现单链表(线性表)完整实例”这一主题,在下面的回答中我们将会涉及以下两个方面: 单链表的原理以及相关概念; C#语言实现单链表的完整攻略。 单链表的原理及概念 单链表是常用的一种链式存储结构,因为其结构形式极其简单,便于操作和改变长度,所以经常用作链表的头结点。简单的来说,单链表由若干个结点组成,每个结点包括一个存放元素的数据域(可以为…

    C# 2023年6月1日
    00
  • C#中List和SortedList的简介

    下面我将详细介绍C#中List和SortedList的简介以及它们的区别。 List和SortedList简介 List List是C#中的一个泛型集合类,它可以按照添加的顺序存储任意类型的元素,并且可以动态地扩展大小。List有许多有用的方法,如Add添加新元素、Remove删除元素等。 SortedList SortedList是C#中的一个泛型集合类,…

    C# 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部