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日

相关文章

  • asp.net微信开发(自定义会话管理)

    ASP.NET微信开发自定义会话管理攻略 1. 简介 微信公众号开发需要用到微信的会话管理,微信提供了默认的会话功能,但是很多时候,开发者的业务需求与微信默认的会话功能并不完全匹配,这时候就需要自定义会话管理。本攻略就是讲解如何通过ASP.NET开发自定义会话管理。 2. 实现步骤 2.1 SessionState模式 微信的会话管理需要依赖ASP.NET的…

    C# 2023年6月3日
    00
  • C#实现JSON字符串序列化与反序列化的方法

    下面是详细的C#实现JSON字符串序列化与反序列化的方法攻略: 一、什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript语言的一个子集,但是采用了类似于C语言家族的语法。JSON的格式比较简单明了且轻便,能够更好地支持Web端的数据交互,因此被广泛应用。 二、JSON序列化与反…

    C# 2023年5月31日
    00
  • C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    首先,要使用C#连接Oracle数据库,需要引用Oracle.ManagedDataAccess.dll库,并且在代码中使用相应的命名空间。以下是使用Oracle.ManagedDataAccess.dll连接Oracle数据库的步骤: 步骤一:引用Oracle.ManagedDataAccess.dll文件 在Visual Studio中新建项目后,右键“…

    C# 2023年6月2日
    00
  • Unity相机移动之屏幕边缘检测

    针对Unity相机移动之屏幕边缘检测的完整攻略,我将为你提供详细讲解,包含以下几个部分: 屏幕边缘检测的原理 实现屏幕边缘检测的方法 两个实例说明 1. 屏幕边缘检测的原理 在Unity中,我们通过挂载脚本实现相机的移动。而要实现屏幕边缘检测,我们需要了解以下几个概念: Camera.main:获取场景中主相机对象; Camera.ViewportToWor…

    C# 2023年6月3日
    00
  • C# File.ReadAllBytes(string path):读取指定文件的所有字节内容

    File.ReadAllBytes(string path)是C#中一个用于读取指定文件的字节流并将其以字节数组的形式返回的方法。 作用: 该方法用于将指定文件中的所有字节读入一个字节数组中,并返回该字节数组。可以使用此方法来读取任何类型的文件,包括图像、声音和文本文件等。 使用方法攻略: 要使用File.ReadAllBytes方法,需要在代码中使用以下命…

    C# 2023年4月19日
    00
  • (asp.net c#)DropDownList绑定后显示对应的项的两种方法

    下面是详细讲解“(asp.net c#)DropDownList绑定后显示对应的项的两种方法”的攻略: 1. 根据绑定的值选中对应的项 如果绑定的是数据源,可以在数据绑定完成后,通过设置DropDownList的SelectedItem属性,来实现选中对应的项。 “`csharp // 获取数据源 List data = new List{“apple”,…

    C# 2023年5月31日
    00
  • C#实现将应用程序设置为开机启动的方法

    下面我会详细讲解如何用 C# 实现将应用程序设置为开机启动的方法。 方法一:使用注册表 Windows 操作系统允许我们通过修改注册表的方式来设置开机启动程序。下面是具体的步骤: 打开注册表编辑器。在 Windows 搜索框中键入 “regedit” 并回车即可打开。 找到以下注册表路径:HKEY_CURRENT_USER\SOFTWARE\Microsof…

    C# 2023年6月7日
    00
  • C#如何检测操作系统版本

    如果你想要检测操作系统版本的信息,可以使用以下代码来获取: using System; using Microsoft.Win32; class Program { static void Main() { string osVersion = GetOSVersion(); Console.WriteLine("当前操作系统版本为: "…

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