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日

相关文章

  • 记一次 .NET 某车零件MES系统 登录异常分析

    一:背景 1. 讲故事 这个案例有点特殊,以前dump分析都是和软件工程师打交道,这次和非业内人士交流,隔行如隔山,从指导dump怎么抓到问题解决,需要一个强大的耐心。 前几天有位朋友在微信上找到我,说他们公司采购的MES系统登录的时候出现了异常,让我帮忙看一下,我在想解铃还须系铃人,怎么的也不应该找到我呀,据朋友反馈项目已经验收,那边给了回馈是网络的问题,…

    C# 2023年5月8日
    00
  • C#中使用Cache框架快速实现Cache操作

    下面我来详细讲解一下“C#中使用Cache框架快速实现Cache操作”的完整攻略。 1. Cache框架简介 Cache框架是一个ASP.NET的缓存库,它提供了可配置的缓存服务,可以加速Web应用程序以及数据访问操作。使用Cache框架,我们可以快速实现简单而高效的Cache操作。 2. 安装Cache框架 首先,我们需要安装Cache框架。可以通过NuG…

    C# 2023年6月3日
    00
  • C#使用SQLDMO操作数据库的方法

    下面我将详细讲解“C#使用SQLDMO操作数据库的方法”的完整攻略。 一、SQLDMO介绍 SQLDMO是一种用于操作Microsoft SQL Server的对象模型。它是一种COM对象模型,使得从C#语言中使用该模型变得十分容易。 二、准备工作 在使用SQLDMO之前,需要引入相应的程序集。程序集一般位于以下地址中: C:\Program Files\M…

    C# 2023年6月1日
    00
  • ASP.NET Core MVC 从入门到精通之路由

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月17日
    00
  • C#基于百度AI实现机器翻译功能

    下面是“C#基于百度AI实现机器翻译功能”完整攻略的详细讲解。 1. 准备工作 在开始实现机器翻译功能之前,我们需要先准备好所需要的资源和工具: 1.1 安装百度AI SDK 访问百度AI开放平台并注册账号,然后可以在控制台获取到 api_key 和 secret_key。 百度AI SDK提供了各种AI相关的服务,我们需要安装其中的机器翻译SDK,可以通过…

    C# 2023年5月31日
    00
  • C# Linq的Contains()方法 – 确定序列是否包含指定的元素

    当我们在处理集合数据时,可能经常用到判断某个元素是否在集合中的需求。这时,Linq中的Contains()方法就可以派上用场了。在本次攻略中,我们将详细讲解C# Linq的Contains()方法。 一、Contains()方法是什么 Contains()方法是Linq中用于判断某个元素是否在集合中的方法。其返回值为bool类型,true表示元素在集合中,f…

    C# 2023年4月19日
    00
  • 在Unity中实现简单的伪时间同步

    下面我将详细讲解在Unity中实现简单的伪时间同步的完整攻略。 什么是伪时间同步? 伪时间同步(Pseudo-Synchronization)是指在网络环境下,通过一些技巧来实现多个客户端之间的游戏同步。它并不是真正的时间同步,而是一种近似的同步方式。 实现伪时间同步的思路 伪时间同步的核心思路是将客户端的游戏时间同步,而不是同步真实世界中的时间。 在实现伪…

    C# 2023年6月1日
    00
  • C#实现的Socket服务器端、客户端代码分享

    接下来我将详细讲解如何实现C# Socket服务器端、客户端代码的分享。 一、概述 Socket是一种应用程序编程接口(API),用于在两个计算机之间进行网络通信。在C#中,可以使用System.Net.Sockets命名空间来创建和使用Socket。本攻略将介绍如何使用C#创建一个简单的Socket服务器端和客户端,并分享相关代码。 二、Socket服务器…

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