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日

相关文章

  • C#实现打印与打印预览功能的思路及代码

    C#实现打印与打印预览功能可以通过以下步骤来完成: 1. 准备打印文档 首先,我们需要准备好需要打印的文档。可以使用C#中的PrintDocument类来创建打印文档。以下是一个简单的示例代码,演示如何使用PrintDocument类: private void PrintDocument1_PrintPage(object sender, PrintPag…

    C# 2023年6月3日
    00
  • C# 基础编程题集锦

    简单字符串加密 编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下:’a→d’ ‘b’→’e’ ‘w’→z’ …… x’→’a’ ‘y’→b’ ‘z→c’ ‘A’→’D’ ‘B’→’E’ ‘W’→’Z’ ‘X’→’A’ ‘Y’→’B’ ‘Z’→’C’ ?对于其他字符,不进行加密。 static void Main(string[] …

    C# 2023年5月1日
    00
  • 详解C#中通过委托来实现回调函数功能的方法

    详解C#中通过委托来实现回调函数功能的方法: 1.委托和回调函数的概念 在C#中,委托(Delegate)是一种类型,它是一种指向方法的引用,可以将方法作为参数传递。回调函数(Callback Function)是一种方法,它可以作为参数传递给其他方法,然后在适当的时候被调用。 2.使用委托实现回调函数 在C#中,可以使用委托来实现回调函数的功能。首先定义一…

    C# 2023年6月1日
    00
  • C#任务并行Parellel.For和Parallel.ForEach

    我们来详细讲解一下C#中任务并行的两个方法Parallel.For和Parallel.ForEach的使用攻略。 Parallel.For 用法 Parallel.For是C#中的一个并行任务处理方法,可以并行处理一个区间内的多个任务。其语法格式如下: Parallel.For(startIndex, endIndex, index => { // 处…

    C# 2023年6月6日
    00
  • 轻松学习C#的属性

    当您学习C#编程语言时,属性是一个重要的概念。属性可用于对类中的字段进行访问、设置和检查。通过使用属性,可以更好地组织代码并提高代码重用性。 什么是属性? 属性是一种C#编程语言中的特殊语法,它允许使用getter和setter方法对类中的字段进行访问、设置和检查。通过属性,可以在类外部访问私有字段,其本质上是对字段进行封装,确保对数据的访问是安全和可控的。…

    C# 2023年6月1日
    00
  • c# 接口interface基础入门小例子

    接下来我将为你详细讲解“C#接口interface基础入门小例子”的完整攻略。 什么是C#接口interface 接口是一种约定,它规定了某个类必须具备哪些方法和属性。接口是在C#中实现多态性的方式之一,通过接口,我们可以实现一些常用的设计模式,如工厂模式、适配器模式等。一个接口定义了一系列方法名称、参数类型和返回类型,但并不提供方法的实现。方法的实现是由具…

    C# 2023年5月31日
    00
  • 详解C#中使用对象或集合的初始值设定项初始化的操作

    使用C#中的对象或集合初始化器,可以方便地对对象或集合进行初始化操作。对象初始化器用于初始化对象的字段和属性,而集合初始化器用于初始化集合中的元素。 以下是使用对象初始化器初始化对象的示例: public class Person { public string Name { get; set; } public int Age { get; set; } …

    C# 2023年5月31日
    00
  • C# 实现WebSocket服务端教程

    针对“C# 实现WebSocket服务端教程”,我将提供完整的攻略。下面是详细的步骤: 步骤一:创建一个空的C#控制台应用程序 可以使用Visual Studio进行创建,也可以使用命令行创建,此处不再赘述。在创建时,需要选择.NET Core 3.x或者.NET 5+作为Target Framework。 步骤二:添加NuGet包 在控制台中输入以下命令,…

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