c语言编程笔录

首页 > C语言 > c语言

c语言

C#使用NOPI库实现导入Excel文档

更新时间:2023-08-12

前言

本文将使用C#和NOPI库来实现导入Excel文档的功能。NOPI是一个在C#环境下操作Excel文件的强大库,它提供了丰富的功能和API,使得我们能够轻松地读取和处理Excel文档。

代码实现

首先,我们需要安装NOPI库。可以通过NuGet包管理器来安装,或者手动下载和引用DLL文件。

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

public class ExcelImporter
{
    public DataTable ImportExcel(string filePath)
    {
        DataTable dataTable = new DataTable();

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

            if (Path.GetExtension(filePath) == ".xlsx")
            {
                workbook = new XSSFWorkbook(file);
            }
            else if (Path.GetExtension(filePath) == ".xls")
            {
                workbook = new HSSFWorkbook(file);
            }
            else
            {
                throw new Exception("Invalid file format. Only .xlsx and .xls files are supported.");
            }

            ISheet sheet = workbook.GetSheetAt(0);

            // 获取表头
            IRow headerRow = sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;

            for (int i = 0; i < cellCount; i++)
            {
                string columnName = headerRow.GetCell(i).StringCellValue;
                DataColumn column = new DataColumn(columnName);
                dataTable.Columns.Add(column);
            }

            // 获取数据
            int rowCount = sheet.LastRowNum;

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

                DataRow dataRow = dataTable.NewRow();

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

                dataTable.Rows.Add(dataRow);
            }
        }

        return dataTable;
    }
}

代码解释

上述代码定义了一个名为ExcelImporter的类,该类包含一个名为ImportExcel的方法,用于导入指定路径的Excel文档并返回一个DataTable对象。DataTable是C#中用于表示表格数据的类。

在ImportExcel方法中,我们首先根据文件路径创建一个FileStream对象,然后根据文件扩展名选择相应的Workbook类型,使用XSSFWorkbook或HSSFWorkbook来读取Excel文档,分别对应新版和旧版的Excel格式。

接下来,我们获取Excel文档中的第一个工作表(索引为0),并获取表头行,根据表头行的单元格数量创建DataTable的列。然后,我们遍历数据行,将每一行的数据存储到DataTable中。

最后,我们返回DataTable对象,即包含Excel文档数据的表格。

总结

通过使用C#和NOPI库,我们可以方便地导入Excel文档并进行处理。借助NOPI提供的丰富功能和API,我们可以轻松地读取Excel文档的内容,并将其转换为C#中的数据对象,如DataTable。这样,我们就可以在程序中对Excel数据进行进一步的操作和分析。