三步将Asp.Net页面输出到EXCEL里

下面是“三步将Asp.Net页面输出到Excel里”的完整攻略,包含两个示例。

1. 引用Excel操作库

在输出Asp.Net页面到Excel前,需要先引用Excel操作库。常用的Excel操作库包括:

  • NPOI(Nuget包名:NPOI)
  • EPPlus(Nuget包名:EPPlus)

这里以NPOI为例。我们可以通过Nuget引入NPOI:

Install-Package NPOI

或者在项目的Packages.config文件中手动添加:

<packages>
  <package id="NPOI" version="2.5.3" targetFramework="net461" />
</packages>

2. 编写输出代码

输出代码的核心是将Asp.Net页面转换成Excel数据格式。下面是一个示例代码,用于将GridView中的数据输出到Excel:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ExcelSample : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGrid();
        }
    }

    private void BindGrid()
    {
        var data = new List<Customer>()
        {
            new Customer {Name = "Tom", Age = 18},
            new Customer {Name = "Jerry", Age = 20},
            new Customer {Name = "Lucy", Age = 22},
        };
        gvData.DataSource = data;
        gvData.DataBind();
    }

    protected void btnExport_Click(object sender, EventArgs e)
    {
        var wb = new HSSFWorkbook();
        var sheet = wb.CreateSheet("Sheet1");

        var row = sheet.CreateRow(0);
        for (int i = 0; i < gvData.HeaderRow.Cells.Count; i++)
        {
            row.CreateCell(i).SetCellValue(gvData.HeaderRow.Cells[i].Text);
        }

        for (int i = 0; i < gvData.Rows.Count; i++)
        {
            row = sheet.CreateRow(i + 1);
            for (int j = 0; j < gvData.Rows[i].Cells.Count; j++)
            {
                row.CreateCell(j).SetCellValue(gvData.Rows[i].Cells[j].Text);
            }
        }

        var fileName = "Export" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
        var ms = new MemoryStream();
        wb.Write(ms);
        Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
        Response.ContentType = "application/vnd.ms-excel";
        Response.BinaryWrite(ms.ToArray());
        wb = null;
        ms.Close();
        ms = null;
        Response.End();
    }
}

public class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }
}

这个例子中,我们首先在页面加载时绑定GridView的数据,然后通过按钮的点击事件将数据输出到Excel文件。输出的过程中,我们创建一个Workbook对象,再创建一个Sheet对象,然后逐行逐列地将数据填入Sheet中,并最终将Workbook对象写入内存流中,并输出给客户端。在Response对象中设置Content-Disposition、Content-Type等属性,后在BinaryWrite方法中输出二进制数据。

3. 测试输出结果

当你运行代码,点击"Export"按钮时,Excel文件会被下载到本地。你可以双击打开它,看看输出结果是否与你预期一致。

下面是一个输出进阶版的示例代码,用于将自定义的数据集合输出到Excel:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ExcelSample : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindData();
        }
    }

    private void BindData()
    {
        var data = new List<Student>()
        {
            new Student {Name = "Tom", Age = 18, Gender = "M", Score = 85},
            new Student {Name = "Jerry", Age = 20, Gender = "M", Score = 90},
            new Student {Name = "Lucy", Age = 22, Gender = "F", Score = 88},
        };
        gvData.DataSource = data;
        gvData.DataBind();
    }

    protected void btnExport_Click(object sender, EventArgs e)
    {
        var fileName = "Export" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
        var ms = ExportDataToExcel(PrepareData(), fileName);
        Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
        Response.ContentType = "application/vnd.ms-excel";
        Response.BinaryWrite(ms.ToArray());
        ms.Close();
        ms = null;
        Response.End();
    }

    private MemoryStream ExportDataToExcel(IEnumerable<Student> data, string fileName)
    {
        var wb = new HSSFWorkbook();
        var sheet = wb.CreateSheet("Sheet1");

        var rowIndex = 0;

        // header
        var row = sheet.CreateRow(rowIndex++);
        row.CreateCell(0).SetCellValue("Name");
        row.CreateCell(1).SetCellValue("Age");
        row.CreateCell(2).SetCellValue("Gender");
        row.CreateCell(3).SetCellValue("Score");

        // data
        foreach (var item in data)
        {
            row = sheet.CreateRow(rowIndex++);
            row.CreateCell(0).SetCellValue(item.Name);
            row.CreateCell(1).SetCellValue(item.Age);
            row.CreateCell(2).SetCellValue(item.Gender);
            row.CreateCell(3).SetCellValue(item.Score);
        }

        var ms = new MemoryStream();
        wb.Write(ms);
        wb = null;
        ms.Seek(0, SeekOrigin.Begin);
        return ms;
    }

    private IEnumerable<Student> PrepareData()
    {
        var data = new List<Student>()
        {
            new Student {Name = "Tom", Age = 18, Gender = "M", Score = 85},
            new Student {Name = "Jerry", Age = 20, Gender = "M", Score = 90},
            new Student {Name = "Lucy", Age = 22, Gender = "F", Score = 88},
            new Student {Name = "Amy", Age = 19, Gender = "F", Score = 92},
            new Student {Name = "Bob", Age = 21, Gender = "M", Score = 84},
            new Student {Name = "John", Age = 20, Gender = "M", Score = 85},
            new Student {Name = "Lily", Age = 22, Gender = "F", Score = 90},
        };

        // apply filter
        if (!string.IsNullOrEmpty(txtNameFilter.Text))
        {
            data = data.Where(s => s.Name.IndexOf(txtNameFilter.Text.Trim(), StringComparison.OrdinalIgnoreCase) >= 0).ToList();
        }

        return data;
    }
}

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
    public int Score { get; set; }
}

这个例子中,我们精简了页面结构,仅保留了一个GridView和一个输出按钮。数据绑定和输出的核心代码分别封装在了BindData、PrepareData、ExportDataToExcel三个方法中。PrepareData用于准备数据,ExportDataToExcel用于将数据导出到Excel文件中。这里我们加入了一个简单的查询功能,可以根据姓名来筛选学生。

这里举的是两个例子,只是涵盖了Excel导出的两个方面,但实际使用中,需要根据具体情况进行探索、迭代和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:三步将Asp.Net页面输出到EXCEL里 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • asp.net FindControl方法误区和解析

    ASP.NET是一个强大的Web应用程序框架,其控件的使用使得我们能够快速地创建并部署Web应用程序。FindControl方法是ASP.NET中常用的一个方法,它被用于在Web应用程序中查找控件的引用。 然而,在使用FindControl方法时,可能会存在一些误区和需要解析的问题。在本篇文章中,我们将探讨如何正确地使用FindControl方法,并且通过细…

    C# 2023年6月3日
    00
  • ASP 处理JSON数据的实现代码

    ASP(Active Server Pages)是类似于PHP的一种动态服务器端脚本语言,在ASP中实现JSON数据处理需要使用到一些相关的类库。 处理JSON数据的基本流程如下: 客户端通过HTTP请求将JSON数据发送到服务器端 服务器端的ASP代码接收JSON数据,并通过相关类库解析JSON数据成为一个可操作的对象 服务器端的ASP代码对解析后的JSO…

    C# 2023年5月31日
    00
  • C#写一套最全的MySQL帮助类(包括增删改查)

    介绍说明:这个帮助类包含了六个主要的方法:ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。其中,ExecuteNonQuery用于执行不返回结果集的SQL语句;ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列;Execut…

    C# 2023年4月27日
    00
  • 客户端实现蓝牙接收(C#)知识总结

    下面是关于“客户端实现蓝牙接收(C#)知识总结”的完整攻略。 知识总结 蓝牙简介 蓝牙技术是一种近程无线通信技术,用于在2.4GHz ISM频带上进行短距离数据通信。蓝牙技术具有低功耗、低成本及易于应用等特点,被广泛应用于消费电子、智能家居、医疗设备、安防等领域。 蓝牙规范 蓝牙协议规范由蓝牙核心规范、蓝牙连接规范、蓝牙应用规范和蓝牙设置规范四个部分组成。蓝…

    C# 2023年5月31日
    00
  • C# 模式匹配完全指南

    C# 模式匹配完全指南 本文旨在为C#开发者提供完整的模式匹配指南,包括使用 switch 语句,使用 is 表达式和模式表达式。了解模式匹配可以让你的代码更加简洁、易读和可维护。 使用 switch 语句进行模式匹配 switch 语句可以完成基本的模式匹配,通过模式匹配,可以避免大量的if语句,极大的增强代码的简洁性和可读性。 下面是一个用于判断对象类型…

    C# 2023年6月6日
    00
  • 探秘C# 6.0 的新特性

    探秘C#6.0的新特性 C#6.0引入了一些新的语言特性,包括空值合并运算符、字符串插值、使用表达式的属性和方法、异常筛选、静态using、自动属性初始化器等。本篇文章将逐一详细介绍这些新特性。 空值合并运算符 空值合并运算符(??),是一个二元运算符,如果左操作数为空,则返回右操作数,否则返回左操作数。 示例: int? x = null; int y =…

    C# 2023年5月15日
    00
  • asp.net 虚方法、抽象方法、接口疑问

    ASP.NET是一种用于构建Web应用程序的框架,它支持许多编程范式。虚方法、抽象方法和接口是OOP(面向对象编程)中的重要概念,它们可以帮助我们更好地组织代码、提高代码的可复用性和可维护性。 虚方法(Virtual Methods) 虚方法是可以被覆盖或重写的方法,它需要在父类中声明为virtual,然后在子类中使用override关键字进行覆盖实现。虚方…

    C# 2023年6月3日
    00
  • C#中的虚方法和抽象方法的运用

    C#中的虚方法和抽象方法是面向对象编程中的重要概念,它们可以帮助程序员实现多态性和继承关系。下面我来详细讲解一下它们的运用。 虚方法 基本概念 虚方法是指在基类中声明的方法,子类可以选择性地重写(override)它,在运行时具有多态效果。虚方法使用 virtual 关键字来修饰。 示例说明 我们可以使用一个简单的图形类作为示例,来演示虚方法的应用。我们先定…

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