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日

相关文章

  • JS+WCF实现进度条实时监测数据加载量的方法详解

    JS+WCF实现进度条实时监测数据加载量的方法详解 在Web应用程序中,数据加载是一个常见的操作。为了提高用户体验,我们通常需要实现一个进度条来显示数据加载的进度。本文将详细讲解如何使用JS和WCF实现进度条实时监测数据加载量的方法,并提供两个示例。 1. 使用JS实现进度条 以下是使用JS实现进度条的基本步骤: 在HTML页面中,添加一个进度条元素。 &l…

    C# 2023年5月15日
    00
  • c#基础系列之值类型和引用类型的深入理解

    C#基础系列之值类型和引用类型的深入理解 值类型和引用类型 C#中的变量可以分为值类型和引用类型两种。所谓值类型,就是它们在内存中直接存储它们的值,而引用类型则存储对象在内存中的地址。常见的值类型包括整型、浮点型、布尔型和枚举类型,而常见的引用类型包括类、接口、数组和委托等。 值类型使用堆栈空间存储,可以直接访问,速度较快,但是数据量较小,一般在32位系统中…

    C# 2023年5月15日
    00
  • vs如何读取mysql中的数据并解决中文乱码问题

    读取MySQL中的数据并将其显示在Visual Studio(VS)中是一个常见的需求。在这个过程中,由于编码问题,可能出现中文乱码的情况,需要进行一些处理。下面是详细的攻略: 步骤一:安装MySQL连接器 要在VS中读取MySQL的数据,首先需要安装MySQL连接器。可以从MySQL官网上下载适合自己系统的MySQL连接器,下载链接为:https://de…

    C# 2023年5月31日
    00
  • Unity3D摄像机跟随小球移动而不旋转的设置方法

    让我们来讲解一下“Unity3D摄像机跟随小球移动而不旋转的设置方法”,以下是具体的步骤: 步骤一:创建一个场景 首先,在Unity编辑器中创建一个新场景,然后创建一个小球和一个摄像机。将小球放在场景中央,并将摄像机放在适当的位置来拍摄小球。 步骤二:设置摄像机位置和旋转 接下来,我们需要将摄像机的位置和旋转设置为固定的。具体步骤如下: 找到摄像机组件Ins…

    C# 2023年6月3日
    00
  • c#调用存储过程实现登录界面详解

    让我来为你详细解释一下“C# 调用存储过程实现登录界面”的攻略。 什么是存储过程? 存储过程是一组 SQL 语句的集合,它们执行某些指定任务。存储过程通常是为了完成特定的任务而设计的,比如:插入、更新、删除数据等等。存储过程可以在数据库中创建并保存,供其他程序或者脚本调用执行。 如何调用存储过程实现登录界面? 下面给出具体的步骤: 步骤一:创建一个存储过程 …

    C# 2023年5月31日
    00
  • C#中==(双等于号)与equals()区别详解

    C#中,==(双等于号)与equals()都是比较两个对象是否相等的操作。但是它们之间存在一些区别,接下来我们来详细讲解。 ==(双等于号)的作用 在C#中,双等于号是用来比较两个变量的值是否相等的,例如: int num1 = 10; int num2 = 10; bool result1 = (num1 == num2); // true 以上代码中,我…

    C# 2023年6月7日
    00
  • C# 常用公共方法

    C#常用公共方法 什么是C#常用公共方法? 在C#中,公共方法是可以被所有对象访问的方法,这些方法一般是在.NET基础类库(BCL)中定义的。它们为开发人员提供了在应用程序中处理常见操作和函数的方便方法。在实际的编程过程中,开发人员可以调用这些公共方法,并且不需要重新实现一个新的方法来满足自己的需求。 C#常用公共方法列表 下面是C#中常用的公共方法列表: …

    C# 2023年5月15日
    00
  • c#生成excel示例sql数据库导出excel

    要实现“c#生成excel示例sql数据库导出excel”的功能,需要分为以下几个步骤: 从数据库中获取需要导出的数据 将数据以Excel格式进行保存 下面是具体的步骤和示例代码: 步骤一:从数据库中获取数据 首先,需要引入System.Data.SqlClient命名空间,该命名空间提供了对SQL Server数据库的访问功能。 using System.…

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