C#使用NPOI读取excel转为DataSet

让我来为你详细讲解“C#使用NPOI读取excel转为DataSet”的完整攻略。

什么是NPOI?

NPOI是一款开源的适用于.NET和Java平台的POI开发包。POI是Apache Software Foundation的一个开源项目,其主要功能是对Microsoft Format Documents的解析和创建,比如Word、Excel、PowerPoint等。

准备工作

首先我们需要安装NPOI这个库,可以通过NuGet获取,也可以前往官网下载安装。接着,我们需要引入以下DLL文件:
- NPOI.dll
- NPOI.OOXML.dll
- NPOI.OpenXmlFormats.dll

读取Excel

现在我们开始来读取Excel,代码如下:

using System.Data;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

public static DataSet ReadExcel(string filePath)
{
    DataSet ds = new DataSet();

    using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        IWorkbook workbook = new XSSFWorkbook(stream);

        for (int i = 0; i < workbook.NumberOfSheets; i++)
        {
            ISheet sheet = workbook.GetSheetAt(i);

            DataTable dataTable = new DataTable(sheet.SheetName);

            IRow header = sheet.GetRow(0);
            if (header != null)
            {
                int columnIndex = 0;
                foreach (ICell cell in header)
                {
                    var column = new DataColumn(cell.ToString());
                    dataTable.Columns.Add(column);
                    columnIndex++;
                }
            }

            for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
            {
                IRow row = sheet.GetRow(rowIndex);
                if (row == null)
                    continue;

                var dataRow = dataTable.NewRow();

                for (int columnIndex = 0; columnIndex < row.LastCellNum; columnIndex++)
                {
                    ICell cell = row.GetCell(columnIndex);
                    if (cell == null)
                        continue;

                    dataRow[columnIndex] = cell.ToString();
                }

                dataTable.Rows.Add(dataRow);
            }

            ds.Tables.Add(dataTable);
        }
    }

    return ds;
}
  • 首先,我们使用FileStream来读取Excel文件。
  • 然后,我们使用XSSFWorkbook来实例化IWorkbook对象,其中,XSSFWorkbook用于读取xlsx格式文件,如果要读取xls格式文件,则需要使用HSSFWorkbook
  • 接着,我们使用workbook.NumberOfSheets获取工作簿的工作表数量,再使用workbook.GetSheetAt(i)来获取相应的工作表。
  • 对于每个工作表,我们使用sheet.SheetName作为数据表的表名,并实例化一个DataTable对象。
  • 接着,我们使用sheet.GetRow(0)来获取表头的行,然后使用header.ToString()来将每个单元格的值转化成字符串,并用DataColumn来创建数据表的列。
  • 然后,我们从第二行开始,使用sheet.GetRow(rowIndex)来获取每一行,使用row.GetCell(columnIndex)获取每个单元格,并将其转化成字符串,并将其放入DataRow中。
  • 最后,我们使用ds.Tables.Add(dataTable)将数据表添加到数据集中,并返回数据集。

示例

下面,我来举两个例子:

示例1:读取单个工作表

var filePath = "path/to/file.xlsx";
var ds = ReadExcel(filePath);

var dataTable = ds.Tables[0];
for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
{
    var row = dataTable.Rows[rowIndex];
    for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
    {
        Console.Write(row[columnIndex] + "\t");
    }
    Console.WriteLine();
}

以上代码会读取file.xlsx文件的第一个工作表,并将其输出到控制台中。

示例2:读取多个工作表

var filePath = "path/to/file.xlsx";
var ds = ReadExcel(filePath);

foreach (DataTable dataTable in ds.Tables)
{
    Console.WriteLine(dataTable.TableName);
    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
    {
        var row = dataTable.Rows[rowIndex];
        for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
        {
            Console.Write(row[columnIndex] + "\t");
        }
        Console.WriteLine();
    }
}

以上代码会读取file.xlsx文件的所有工作表,并将其输出到控制台中。

希望这些内容可以帮助到你。如果还有什么问题,请随时联系我。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用NPOI读取excel转为DataSet - Python技术站

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

相关文章

  • .NET下模拟数组越界的方法详解

    下面我来详细讲一下“.NET下模拟数组越界的方法详解”的攻略。 标题 首先,我们需要明确一下,什么是数组越界。当我们在使用数组时,访问了不存在的数组下标,就会发生数组越界,而这个错误往往会导致程序崩溃或异常。 在.NET中,我们可以通过模拟数组越界的方法来测试代码的鲁棒性和容错性。下面是模拟数组越界的具体步骤: 步骤1:创建一个数组 首先,我们需要创建一个数…

    C# 2023年5月31日
    00
  • 关于dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库的问题

    dotnet替换ASP.NET Core的底层通讯为命名管道的IPC库 在ASP.NET Core中,我们可以使用Inter-Process Communication(IPC)来实现进程间通信。默认情况下,ASP.NET Core使用Socket作为底层通信机制。但是,我们也可以使用命名管道来替换Socket。在本攻略中,我们将介绍如何使用命名管道来替换S…

    C# 2023年5月16日
    00
  • C# 以MDF文件链接数据库的示例代码

    下面是详细讲解 “C# 以MDF文件链接数据库的示例代码”的完整攻略: 一、前置条件 在编写 C# 代码之前,需要先安装 Microsoft SQL Server 以及 Visual Studio 等开发工具。安装步骤可以参考其官方文档进行。 二、创建 MDF 文件 在 SQL Server Management Studio 中创建一个新的数据库,设置其名…

    C# 2023年6月2日
    00
  • Unity 如何获取鼠标停留位置下的物体

    获取鼠标停留位置下的物体,需要以下几个步骤: 根据鼠标位置获取射线 发射射线,判断射线是否碰撞到物体 如果碰撞到物体,获取物体信息 下面是具体的实现步骤: 步骤1:根据鼠标位置获取射线 在 Unity 中,可以通过 Camera 的 ScreenPointToRay 方法获取屏幕上一点的射线。 Ray ray = Camera.main.ScreenPoin…

    C# 2023年6月3日
    00
  • C#中使用迭代器处理等待任务

    下面是关于C#中使用迭代器处理等待任务的完整攻略: 1. 使用迭代器和async/await处理任务 在C#中,我们使用async/await来异步处理任务。但是如果需要按顺序执行多个异步任务,常规的做法是使用多个await关键字。例如: async Task DoSomethingAsync() { var result1 = await GetResul…

    C# 2023年5月15日
    00
  • C#实现简单成绩管理系统的完整步骤

    为了让大家更容易理解,我将这个攻略分为以下几个步骤: 步骤一:搭建环境 我们的第一步是搭建C#开发环境。首先需要安装Visual Studio或者其他的C#IDE,比如Rider等。安装完成后,在IDE中创建一个新的控制台应用程序项目。 步骤二:创建数据结构 我们需要为成绩管理系统创建一个数据结构,用于存储学生姓名和成绩。我们可以使用C#中的类来实现这个数据…

    C# 2023年6月6日
    00
  • C# List生成Txt文档并且读取Txt文档封装List

    生成Txt文档并且读取Txt文档封装List 是一个非常常见的需求,一般使用C#中的File和List类就可以很容易地完成。 以下是具体的步骤: 1. 创建List对象 首先,在C#中创建一个List对象来存储要写入到文本文件中的元素,我们可以通过new关键字来创建一个字符串类型的List对象,例如: List<string> list = ne…

    C# 2023年6月7日
    00
  • 从ASP.NET Core3.1迁移到5.0的方法

    从 ASP.NET Core 3.1 迁移到 5.0 可以带来更好的性能、更好的开发体验和更多的新功能。以下是从 ASP.NET Core 3.1 迁移到 5.0 的完整攻略: 步骤一:备份项目 在进行迁移前,需要备份 ASP.NET Core 3.1 项目。可以将项目文件复制到另一个目录或者使用版本控制系统来备份项目。 步骤二:更新 .NET Core S…

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