C#使用NPOI对Excel数据进行导入导出

下面就给大家详细讲解一下“C#使用NPOI对Excel数据进行导入导出”的完整攻略。

一、NPOI是什么?

NPOI是一个跨平台的第三方.xls和.xlsx格式操作组件库,适用于.NET平台,可以方便地读取、创建和编辑Excel文件,提供了针对Excel文件的内存读写支持,支持xls、xlsx、doc、docx、ppt、pptx等多种Office格式。

二、NPOI应用的常用类

在使用NPOI进行Excel读写时,常用的类有以下几个:

  • HSSFWorkbook:对应xls格式
  • XSSFWorkbook:对应xlsx格式
  • HSSFSheet:对应Excel工作表(xls)
  • XSSFSheet:对应Excel工作表(xlsx)
  • HSSFRow:对应Excel工作表中的行(xls)
  • XSSFRow:对应Excel工作表中的行(xlsx)

三、C#使用NPOI进行Excel导出

3.1 创建Excel文件

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
using System.Web;

public ActionResult Export()
{
    //创建工作簿对象
    HSSFWorkbook workbook = new HSSFWorkbook();
    //创建工作表对象
    ISheet sheet = workbook.CreateSheet("sheet1");
    //创建行对象
    IRow row1 = sheet.CreateRow(0);
    //创建列对象
    ICell cell1 = row1.CreateCell(0);
    cell1.SetCellValue("姓名");
    ICell cell2 = row1.CreateCell(1);
    cell2.SetCellValue("性别");
    ICell cell3 = row1.CreateCell(2);
    cell3.SetCellValue("年龄");
    //创建行对象
    IRow row2 = sheet.CreateRow(1);
    //创建列对象
    ICell cell4 = row2.CreateCell(0);
    cell4.SetCellValue("小明");
    ICell cell5 = row2.CreateCell(1);
    cell5.SetCellValue("男");
    ICell cell6 = row2.CreateCell(2);
    cell6.SetCellValue(18);
    //流方式,下载文件
    MemoryStream ms = new MemoryStream();
    workbook.Write(ms);
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename=FileName.xls"));
    Response.BinaryWrite(ms.ToArray());
    return new EmptyResult();
}

3.2 Excel导出模板

public ActionResult ExportTemplate()
{
    //导出模板文件的路径
    string excelTemplatePath = System.Web.HttpContext.Current.Request.MapPath("~/UploadFiles/Template.xls");
    //创建工作簿对象
    HSSFWorkbook workbook = new HSSFWorkbook(new FileStream(excelTemplatePath, FileMode.Open, FileAccess.Read));
    //创建工作表对象
    ISheet sheet = workbook.GetSheetAt(0);
    //获取表头行
    IRow rowHeader = sheet.GetRow(0);
    //获取需要导出的数据列表
    List<User> userList = new List<User>()
    {
        new User { Name = "小明", Gender = "男", Age = 20 },
        new User { Name = "小红", Gender = "女", Age = 18 }
    };
    //导出数据到Excel
    int rowIndex = 1;
    foreach (User user in userList)
    {
        IRow row = sheet.CreateRow(rowIndex);
        ICell cell1 = row.CreateCell(0);
        cell1.SetCellValue(user.Name);
        ICell cell2 = row.CreateCell(1);
        cell2.SetCellValue(user.Gender);
        ICell cell3 = row.CreateCell(2);
        cell3.SetCellValue(user.Age);
        rowIndex++;
    }
    //流方式,下载文件
    MemoryStream ms = new MemoryStream();
    workbook.Write(ms);
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename=FileName.xls"));
    Response.BinaryWrite(ms.ToArray());
    return new EmptyResult();
}

四、C#使用NPOI进行Excel导入

4.1 读取Excel文件

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
using System.Web;

public ActionResult Import()
{
    //获取要上传的Excel文件
    HttpPostedFileBase file = Request.Files["fileUpload"];
    //Excel文件的后缀名(xls/xlsx)
    string fileExtension = Path.GetExtension(file.FileName);
    //Excel文件的完整路径
    string filePath = Path.Combine(HttpContext.Server.MapPath("~/UploadFiles/"), file.FileName);
    file.SaveAs(filePath);
    //根据Excel文件的后缀名,创建对应的工作簿对象
    IWorkbook workbook = null;
    if (fileExtension == ".xls")
    {
        workbook = new HSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
    }
    else if (fileExtension == ".xlsx")
    {
        workbook = new XSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
    }
    //获取第一个工作表
    ISheet sheet = workbook.GetSheetAt(0);
    List<User> userList = new List<User>();
    //遍历工作表中的行
    for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
    {
        IRow row = sheet.GetRow(i);
        if (row == null)
        {
            continue;
        }
        User user = new User();
        user.Name = row.GetCell(0).ToString();
        user.Gender = row.GetCell(1).ToString();
        user.Age = Convert.ToInt32(row.GetCell(2).ToString());
        userList.Add(user);
    }
    //删除已上传的Excel文件
    if (System.IO.File.Exists(filePath))
    {
        System.IO.File.Delete(filePath);
    }
    return View(userList);
}

4.2 解析Excel内容

public ActionResult Import()
{
    //获取要上传的Excel文件
    HttpPostedFileBase file = Request.Files["fileUpload"];
    //Excel文件的后缀名(xls/xlsx)
    string fileExtension = Path.GetExtension(file.FileName);
    //Excel文件的完整路径
    string filePath = Path.Combine(HttpContext.Server.MapPath("~/UploadFiles/"), file.FileName);
    file.SaveAs(filePath);
    //根据Excel文件的后缀名,创建对应的工作簿对象
    IWorkbook workbook = null;
    if (fileExtension == ".xls")
    {
        workbook = new HSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
    }
    else if (fileExtension == ".xlsx")
    {
        workbook = new XSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
    }
    //获取第一个工作表
    ISheet sheet = workbook.GetSheetAt(0);
    List<User> userList = new List<User>();
    //获取表头行
    IRow rowHeader = sheet.GetRow(0);
    //获取需要解析的列的索引
    int nameIndex = -1;
    int genderIndex = -1;
    int ageIndex = -1;
    for (int i = rowHeader.FirstCellNum; i < rowHeader.LastCellNum; i++)
    {
        string cellValue = rowHeader.GetCell(i).ToString();
        if (cellValue == "姓名")
        {
            nameIndex = i;
        }
        else if (cellValue == "性别")
        {
            genderIndex = i;
        }
        else if (cellValue == "年龄")
        {
            ageIndex = i;
        }
    }
    //遍历工作表中的行
    for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
    {
        IRow row = sheet.GetRow(i);
        if (row == null)
        {
            continue;
        }
        User user = new User();
        if (nameIndex != -1)
        {
            user.Name = row.GetCell(nameIndex).ToString();
        }
        if (genderIndex != -1)
        {
            user.Gender = row.GetCell(genderIndex).ToString();
        }
        if (ageIndex != -1)
        {
            user.Age = Convert.ToInt32(row.GetCell(ageIndex).ToString());
        }
        userList.Add(user);
    }
    //删除已上传的Excel文件
    if (System.IO.File.Exists(filePath))
    {
        System.IO.File.Delete(filePath);
    }
    return View(userList);
}

以上就是C#使用NPOI对Excel数据进行导入导出的完整攻略,希望能够对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用NPOI对Excel数据进行导入导出 - Python技术站

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

相关文章

  • jsonp格式前端发送和后台接受写法的代码详解

    下面是关于“jsonp格式前端发送和后台接受写法的代码详解”的完整攻略,包含两个示例。 1. JSONP简介 JSONP(JSON with Padding)是一种跨域数据交互的技术。它允许在不同域之间进行数据交互,而不会受到同源策略的限制。JSONP的原理是利用标签的跨域特性,通过在URL中添加一个回调函数名,让服务器返回一个JavaScript函数调用,…

    C# 2023年5月15日
    00
  • JetBrains Rider 2021.1.0 安装激活方法详解 汉化补丁安装教程 真实有效

    下面就来详细讲解“JetBrains Rider 2021.1.0 安装激活方法详解 汉化补丁安装教程 真实有效”的完整攻略。 一、下载和安装JetBrains Rider 2021.1.0 下载JetBrains Rider 2021.1.0 首先,在官网下载JetBrains Rider 2021.1.0的安装包,官方下载地址:https://www.j…

    C# 2023年5月31日
    00
  • c#数组详解

    C#数组详解 什么是数组 数组是 C# 中最常用的一种数据结构,它可以用于存储同一种数据类型的多个元素。数组中的元素可以通过数组下标进行访问,下标从 0 开始计数。 数组定义和初始化 下面是定义和初始化一个数组的语法: 数据类型[] 数组名 = new 数据类型[数组长度]; 其中,数组类型可以为整型、字符型、浮点型、对象型(即自定义类)等。数组长度为整型数…

    C# 2023年5月31日
    00
  • 在asp.net中使用加密数据库联接字符串保证数据安全

    在ASP.NET中,可以使用加密数据库连接字符串的方式来保障数据库的安全性。具体步骤如下: 1. 生成加密密钥 在ASP.NET中,可以使用System.Web.Security中的方法生成一个加密密钥。在Global.asax.cs中添加以下代码: void Application_Start(object sender, EventArgs e) { /…

    C# 2023年5月31日
    00
  • C#条件拼接Expression<Func<T, bool>>的使用

    C#条件拼接(Expression)是一种在运行时动态拼接查询条件的语法,可以在不知道查询条件组合的情况下进行条件组合,极大提高了代码的可复用性和可维护性。 使用条件拼接需要引入System.Linq.Expressions命名空间。 一般情况下,我们需要根据参数的不同来组合不同的查询条件,比如以下示例: public List<T> Query…

    C# 2023年6月3日
    00
  • C#窗体通讯录系统的示例代码

    C#窗体通讯录系统是一个比较常见的小型应用程序,包含联系人的添加、删除、修改和查询等功能,是初学者开发C#窗体应用程序的绝佳例子。下面是对C#窗体通讯录系统的示例代码的详细攻略。 一、项目结构 C#窗体通讯录系统的示例代码通常由三个主要文件组成: 窗体主文件 Form1.cs:该文件包含了窗体的设计、用户界面和逻辑处理等相关内容。 文本文件 PhoneBoo…

    C# 2023年5月31日
    00
  • C#使用semaphore来管理异步下载请求的方法

    下面我将详细讲解“C#使用semaphore来管理异步下载请求的方法”的完整攻略。 什么是 Semaphore Semaphore(信号量)是一种用于控制访问资源的同步方式。它维护了一个计数器(初始值为一个正整数),用来标识可以访问某一资源的线程数量。当一个线程需要访问该资源时,它需要先对这个计数器进行减一操作,当计数器变为0时,该资源将不再被其他线程访问,…

    C# 2023年6月7日
    00
  • .NET Core部署为Windows服务的详细步骤

    以下是.NET Core部署为Windows服务的详细步骤: 1. 什么是Windows服务 Windows服务是一种在后台运行的,它可以在Windows操作系统启动时自动启动,并在系统运行时一直运行。Windows服务通常用于执行后台任务,例如监视文件夹、处理消息队列等。 2. 什么是.NET Core .NET Core是微软的一个跨平台开发框架,它支持…

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