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日

相关文章

  • C#如何通过T4自动生成代码详解

    关于“C#如何通过T4自动生成代码详解”的完整攻略,我将介绍以下几个方面: T4模板的概念和基础语法 如何使用T4模板自动生成C#代码 两个示例说明 1. T4模板的概念和基础语法 T4是一种文本模板转换器,可以将输入的文本模板转化成编程代码或其他任何文本。在Visual Studio中,每个T4模板都是一个单独的文本文件,后缀为.tt。T4模板文件使用特殊…

    C# 2023年5月31日
    00
  • C#实现几十万级数据导出Excel及Excel各种操作实例

    C#实现几十万级数据导出Excel及Excel各种操作实例 在C#中,我们可以使用第三方库EPPlus来处理Excel文件。以下是几步实现几十万级数据导出Excel的完整攻略: 步骤一:安装EPPlus库 我们可以在NuGet中添加EPPlus库,或是通过官方网站下载最新版。 步骤二:创建Excel文件 我们可以通过以下代码来创建一个Excel文件及相关信息…

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

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

    C# 2023年5月31日
    00
  • C#实现对数组进行随机排序类实例

    C#实现对数组进行随机排序类实例 什么是数组 数组是一个由相同的数据类型组成的有序集合。 如何进行随机排序 在C#中,可以使用Random类来生成随机数,再通过比较大小来进行随机排序。 具体实现代码如下: using System; class Program { static void Main() { int[] numbers = { 1, 2, 3,…

    C# 2023年6月1日
    00
  • C#实现获取程序路径方法小结

    C#实现获取程序路径方法小结 在开发C#程序时,有时候需要获取当前程序的路径,可以使用以下方法。 获取当前程序运行路径 以下是获取当前程序运行的路径的代码: string path = AppDomain.CurrentDomain.BaseDirectory; //或者使用以下逻辑 string path2 = System.IO.Directory.Ge…

    C# 2023年6月7日
    00
  • 利用C#实现AOP常见的几种方法详解

    利用C#实现AOP常见的几种方法详解 AOP(Aspect-Oriented Programming)是面向切面编程的缩写,它是一种编程思想,通过将程序中的通用功能(如日志记录、异常处理、性能统计等)抽象出来,无需修改原始代码,就可以为各个类或方法注入通用功能。AOP技术的主要优点在于可以提高代码的重用性、可维护性和可扩展性。 C#是一种面向对象的编程语言,…

    C# 2023年5月15日
    00
  • c#中利用Tu Share获取股票交易信息

    下面是关于“c#中利用Tu Share获取股票交易信息”的完整攻略。 一、概述 Tu Share是一个免费提供A股、港股等股票交易数据的API,其提供了多种语言的接口,包括Python、Java、C#等,本攻略将介绍如何在C#中使用Tu Share获取股票交易信息。 二、注册账号 在使用Tu Share API之前,需要先注册一个账号,具体如下所示:1. 打…

    C# 2023年5月31日
    00
  • 聚星C#数字信号处理工具包频谱分析的用法

    那么我来详细讲解“聚星C#数字信号处理工具包频谱分析的用法”的完整攻略。 什么是聚星C#数字信号处理工具包? 聚星C#数字信号处理工具包(JStar DSP Toolkit for C#)是一款专业的数字信号处理软件库,它是用 C# 语言编写的,可以在 Windows 平台上运行。该工具包提供了许多数字信号处理领域的功能模块,包括滤波、变换、降噪、频谱分析等…

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