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日

相关文章

  • xUnit 编写 ASP.NET Core 单元测试的方法

    xUnit 编写 ASP.NET Core 单元测试的方法 在ASP.NET Core应用程序中,可以使用xUnit编写单元测试。在本攻略中,我们将介绍如何使用xUnit编写ASP.NET Core单元测试,并提供两个示例说明。 1. 安装xUnit 在ASP.NET Core应用程序中,可以使用NuGet包管理器安装xUnit。可以按照以下步骤操作: 在V…

    C# 2023年5月16日
    00
  • c# 线程安全队列的用法原理及使用示例

    C# 线程安全队列的用法原理及使用示例 什么是线程安全队列? 在线程并发编程中,多个线程同时访问共享数据结构时,会存在竞态条件(race condition)问题,可能导致数据不一致、数据丢失或程序崩溃等问题。为了解决这些问题,需要使用线程安全的数据结构进行并发操作,其中线程安全队列就是一种常见的数据结构。 线程安全队列是一种特殊的队列,能够在多线程并发的情…

    C# 2023年6月7日
    00
  • C#使用oledb操作excel文件的方法

    C#使用OleDb操作Excel文件的方法,具体过程如下: 1. 引入命名空间 使用 OleDb 操作 Excel 前需要引入 System.Data.OleDb 命名空间。可以通过以下语句在文件头部引入命名空间: using System.Data.OleDb; 2. 连接Excel文件 使用 OleDb 操作 Excel 需要连接到 Excel 文件。连…

    C# 2023年6月1日
    00
  • C#中委托用法实例详解

    下面是详细讲解“C#中委托用法实例详解”: 什么是委托 委托是一种类型,它可以用于封装对方法的引用。简单来说,委托就是存储了方法的对象,可以像对待方法一样对待它并向它传递参数。在C#中,使用委托可以大大简化回调函数,具有非常强的灵活性。 如何声明委托 使用delegate关键字可以声明一个委托,如下所示: delegate void MyDelegate(i…

    C# 2023年6月7日
    00
  • Android App中读取XML与JSON格式数据的基本方法示例

    读取XML与JSON格式数据是Android开发中经常用到的操作,下面将根据这个话题给出一个完整攻略,包括从获取XML与JSON数据到解析并展示的过程。 获取XML数据 1. 添加网络权限 在AndroidManifest.xml文件中添加网络权限。 <uses-permission android:name="android.permiss…

    C# 2023年5月31日
    00
  • JS提交form表单实例分析

    JS提交form表单实例分析: 当用户在网站上填写表单时,通过JS代码来自动提交表单也是一种方便快捷的方式,本文将从以下几个方面阐述JS提交form表单的攻略: 首先需要获取form表单元素,可以通过form元素的Id或者Name来获取: let formEle = document.getElementById(‘formId’); // 或者 let f…

    C# 2023年5月31日
    00
  • Unity3D如何获取时间戳或北京时间

    获取时间戳或北京时间可以使用Unity3D内置的API来实现。下文将对获取时间戳和北京时间的方法进行详细讲解,并提供两个示例说明。 获取时间戳 方法一:使用System.DateTime.Now.Ticks属性 System.DateTime.Now.Ticks 返回自 0001 年 1 月 1 日午夜以来的 100 毫微秒间隔数,可以作为时间戳。要获取当前…

    C# 2023年6月1日
    00
  • C#实现文本文件读写方法汇总

    关于“C#实现文本文件读写方法汇总”,我将会提供以下完整的攻略: C#实现文本文件读写方法汇总 一、写入文本文件 1. 使用StreamWriter 可以使用 System.IO.StreamWriter 类来写入文本文件。下面是一个简单的示例,演示了如何使用该类将字符串写入到文本文件中: using System.IO; string filePath =…

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