C#使用NPOI实现Excel和DataTable的互转

这里是使用NPOI实现Excel和DataTable互转的完整攻略,包括具体的步骤和两条示例说明。

1. 安装NPOI库

首先需要安装NPOI库,可以使用NuGet进行安装。在Visual Studio中打开NuGet控制台,输入以下命令来安装NPOI库:

Install-Package NPOI

2. 读取Excel文件

读取Excel文件可以使用HSSFWorkbook或XSSFWorkbook类,它们用于处理xls和xlsx格式的Excel文件。下面是读取Excel文件的代码示例:

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

// 读取Excel文件
public DataTable ReadExcel(string fileName)
{
    string fileExtension = Path.GetExtension(fileName);
    ISheet sheet = null;
    DataTable data = new DataTable();

    using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    {
        if (fileExtension == ".xls")
        {
            HSSFWorkbook workbook = new HSSFWorkbook(fs);
            sheet = workbook.GetSheetAt(0);
        }
        else if (fileExtension == ".xlsx")
        {
            XSSFWorkbook workbook = new XSSFWorkbook(fs);
            sheet = workbook.GetSheetAt(0);
        }

        IRow headerRow = sheet.GetRow(0);
        int cellCount = headerRow.LastCellNum;

        for (int i = headerRow.FirstCellNum; i < cellCount; i++)
        {
            DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
            data.Columns.Add(column);
        }

        for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
        {
            IRow row = sheet.GetRow(i);
            DataRow dataRow = data.NewRow();

            for (int j = row.FirstCellNum; j < cellCount; j++)
            {
                if (row.GetCell(j) != null)
                {
                    dataRow[j] = row.GetCell(j).ToString();
                }
            }

            data.Rows.Add(dataRow);
        }
    }

    return data;
}

3. 处理DataTable

DataTable是在内存中表示的数据表,可以对其进行增删改查等操作。在处理DataTable时最常用的方法是使用foreach循环,以下是一些常用的处理方法:

DataTable dt = ReadExcel("data.xlsx");

// 遍历DataTable
foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn column in dt.Columns)
    {
        Console.WriteLine(row[column]);
    }
}

// 添加行
DataRow newRow = dt.NewRow();
newRow["Name"] = "Tom";
newRow["Age"] = 18;
dt.Rows.Add(newRow);

// 删除行
foreach (DataRow row in dt.Rows)
{
    if (row["Age"].ToString() == "20")
    {
        dt.Rows.Remove(row);
    }
}

// 修改行
foreach (DataRow row in dt.Rows)
{
    if (row["Name"].ToString() == "Tom")
    {
        row["Age"] = 20;
    }
}

// 查询行
DataRow[] rows = dt.Select("Name='Tom'");
foreach (DataRow row in rows)
{
    Console.WriteLine(row["Age"]);
}

// 排序
DataView view = dt.DefaultView;
view.Sort = "Age DESC";
dt = view.ToTable();

4. 写入Excel文件

使用NPOI可以方便地将数据写入Excel文件中。以下是将DataTable数据写入Excel文件的代码示例:

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

// 写入Excel文件
public void WriteExcel(string fileName, DataTable data)
{
    IWorkbook workbook = null;

    if (Path.GetExtension(fileName) == ".xls")
    {
        workbook = new HSSFWorkbook();
    }
    else
    {
        workbook = new XSSFWorkbook();
    }

    ISheet sheet = workbook.CreateSheet("Sheet1");
    IRow headerRow = sheet.CreateRow(0);

    // 写入表头
    for (int i = 0; i < data.Columns.Count; i++)
    {
        headerRow.CreateCell(i).SetCellValue(data.Columns[i].ColumnName);
    }

    // 写入数据
    for (int i = 0; i < data.Rows.Count; i++)
    {
        IRow row = sheet.CreateRow(i + 1);

        for (int j = 0; j < data.Columns.Count; j++)
        {
            row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
        }
    }

    // 保存Excel文件
    using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
    {
        workbook.Write(fs);
    }
}

5. 示例说明

以下是两个示例说明,分别是读取Excel文件和写入Excel文件。

示例1:读取Excel文件

假设有一个名为data.xlsx的Excel文件,其中包含以下内容:

Name Age Gender
Alice 23 F
Bob 25 M

要读取该文件并将其转换为DataTable,可以使用以下代码:

DataTable dt = ReadExcel("data.xlsx");

读取完成后,可以使用以下方法对DataTable进行处理:

foreach (DataRow row in dt.Rows)
{
    Console.WriteLine(row["Name"]);
}

示例2:写入Excel文件

假设有一个名为data的DataTable,其中包含以下内容:

Name Age
Alice 23
Bob 25
Charlie 18

要将该DataTable写入名为output.xlsx的Excel文件中,可以使用以下代码:

WriteExcel("output.xlsx", data);

写入完成后,可以打开output.xlsx文件查看其内容。

以上便是使用NPOI实现Excel和DataTable互转的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用NPOI实现Excel和DataTable的互转 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 深入理解JavaScript系列(18):面向对象编程之ECMAScript实现

    深入理解JavaScript系列(18):面向对象编程之ECMAScript实现 什么是面向对象编程(OOB) 面向对象编程是一种常见的编程范式,也是JavaScript编程中一个重要的概念。它将程序中的数据和方法组织为对象,使得程序具有更好的可读性、可复用性和可维护性。 面向对象编程中的关键点包括:封装、继承和多态。封装是指将数据和方法封装到一个对象中,并…

    C# 2023年6月8日
    00
  • C#中Dapper的使用教程

    下面就为大家详细讲解一下 C# 中 Dapper 的使用教程。 什么是 Dapper? Dapper 是一个轻量级 ORM(Object Relational Mapping)框架。它为 SQL Server、MySQL、Oracle 和 PostgreSQL 提供了一套高效处理 SQL 语句的方法。它采用 Object 与关系数据库之间的映射模型,使开发人…

    C# 2023年5月31日
    00
  • C#简单生成随机密码的方法示例

    下面我来为您详细讲解“C#简单生成随机密码的方法示例”的完整攻略。 1. 生成随机密码 生成随机密码的方法比较多,可以通过随机函数生成随机字符序列,也可以从字符集中随机选取字符生成密码。下面我将介绍几种方法。 1.1 使用 Random 类 可以使用 Random 类生成随机数,然后将生成的随机数转为希望的字符序列(如数字、字母和特殊字符),从而组成随机密码…

    C# 2023年6月7日
    00
  • 利用C#代码将html样式文件与Word文档互换的方法

    利用C#代码将html样式文件与Word文档互换,可以实现在Word文档中添加html样式,同时也可以将Word文档转化为html样式文件,实现两者之间的互相转换。下面提供两个示例说明: 示例1:将html样式添加到Word文档中 1. 引入Word文档COM组件 在C#代码中,首先需要引入Word文档的COM组件。可以在程序的引用中找到 Microsoft…

    C# 2023年5月31日
    00
  • C#实现将千分位字符串转换成数字的方法

    我们来详细讲解一下“C#实现将千分位字符串转换成数字的方法”的攻略。 一、问题简述 在写代码过程中,有时候需要将千分位字符串转换成数字类型。比如,“1,234,567.89”这样的字符串,需要将它转换成浮点数1234567.89。那么,如何在C#中实现这个功能呢? 二、解决方案 在C#中,我们可以使用 NumberStyles.Currency 来将包含货币…

    C# 2023年6月8日
    00
  • C#词法分析器之正则表达式的使用

    C#词法分析器之正则表达式的使用 前言 C#的正则表达式被广泛应用于文本处理和模式匹配。词法分析器是一个典型的例子,需要解析输入的字符串并将其转换为一个完整的语言结构。本文将介绍C#中正则表达式在词法分析器中的应用,并提供两个示例说明。 正则表达式基础 在开始说明C#中正则表达式在词法分析器中的应用之前,我们先来简单介绍正则表达式的基础知识。正则表达式由一些…

    C# 2023年6月7日
    00
  • C# 实现Distinct将对象按条件去重

    下面我来具体讲解“C# 实现Distinct将对象按条件去重”的完整攻略。这里我们假设有一组学生对象数据,每个学生对象包含学生的姓名和年龄两个属性,我们需要按照年龄去重,保留年龄较大的学生对象。攻略如下: 1. 定义学生类对象 首先,我们需要定义一个学生类对象,用于存储学生的姓名和年龄信息。 public class Student { public str…

    C# 2023年6月1日
    00
  • 详解C# 中Session的用法

    详解C# 中Session的用法 什么是Session Session 是指会话,在 Web 应用程序中,它表示从客户端发来的一系列HTTP请求和响应交互。Session 可以用来存储和检索任何类型的对象,且这些对象在整个 Session 生命周期内都可以使用。在 ASP.NET 中可以使用 Session 对象来在服务器上存储和检索用户特定的信息。Sess…

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