欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据_.netcore


目录
  • 背景
  • 读取并保存
  • NPOI信息
  • NPOI 插件介绍
  • 基本功能
  • 示例代码
  • 写入 Excel 文件的示例
  • 相关文章


背景

好久没使用C#操作过Excel等文件,刚好今天有位大学同学问到博主。
他有100多个excel表格文件,需要提取每个文件的第二行数据统一保存到一张表里。
后面又需要把所有文件的excel数据全部放到同一个张表,NPOI插件是插件首选。

读取并保存

创建一个新的工作簿,定义表头,创建表头行。
读取某个文件夹目录,遍历所有文件夹下的所有excel文件,并读取行数据,遍历每个列的行数据,追加到新的工作簿行里,最后进行保存输出到本地。

// 读取xlsx
private void ReadExcelFiles(string folderPath)
{
    if (!Directory.Exists(folderPath))
    {
        MessageBox.Show("指定的文件夹路径不存在");
        return;
    }
    
    // ===创建一个新的工作簿===
    IWorkbook workbook = new XSSFWorkbook();
    ISheet sheet = workbook.CreateSheet("Sheet1");

    // 定义表头
    string[] headers = {
        "字段1", "字段2", "字段3", "字段4", "字段5"
    };

    // 创建表头行
    IRow headerRow = sheet.CreateRow(0);
    for (int i = 0; i < headers.Length; i++)
    {
        headerRow.CreateCell(i).SetCellValue(headers[i]);
    }
    // ===创建一个新的工作簿===


    int rowIndex = 1;
    var files = Directory.GetFiles(folderPath, "*.xlsx");
    foreach (var file in files)
    {
        try
        {
            if (!File.Exists(file))
            {
                MessageBox.Show($"文件 {file} 不存在");
                continue;
            }

            using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                IWorkbook workbook2 = new XSSFWorkbook(fileStream);
                ISheet sheet2 = workbook2.GetSheetAt(0); // 获取第一个工作表

                // 获取行数
                int rowCount = sheet2.PhysicalNumberOfRows;
                for (int rr = 0; rr < rowCount; rr++)
                {
                    IRow row = sheet2.GetRow(rr + 1); // 获取第二行

                    if (row != null)
                    {
                        var rowValues = row.Cells.Select(cell => cell.ToString()).ToArray();

                        IRow dataRow = sheet.CreateRow(rowIndex);
                        for (int i = 0; i < rowValues.Length; i++)
                        {
                            dataRow.CreateCell(i).SetCellValue(rowValues[i]);
                        }
                    }

                    rowIndex++;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"读取文件 {Path.GetFileName(file)} 时发生错误: {ex.Message}");
        }
    }

    // ===保存文件===
    string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "alldata.xlsx");
    using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {
        workbook.Write(fs);
    }
    // ===/保存文件===
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据_excel_02

NPOI信息

NPOI 是一个用于处理 Microsoft Office 文件的开源库,它提供了对 Excel、Word 和 PowerPoint 文件的读写功能。
NPOI 支持处理 .xls 和 .xlsx 格式的 Excel 文件,.doc 和 .docx 格式的 Word 文件,.ppt 和 .pptx 格式的 PowerPoint 文件。
以下是 NPOI 的基本功能和插件介绍:

NPOI 插件介绍

1.NPOI: 核心库,用于读取和写入 Office 文件的基本操作。它包含处理 Excel、Word 和 PowerPoint 文件的功能。
2.NPOI.OOXML: 支持 .xlsx 格式的 Excel 文件(即 Office 2007 及以后版本)。这是 NPOI 的一个扩展库,提供对 Excel 2007 及以后版本格式的支持。
3.NPOI.OpenXml4Net: 支持 .docx 和 .pptx 格式的文件(即 Office 2007 及以后版本)。它用于处理 Open XML 格式的文件。
4.NPOI.HSSF: 支持 .xls 格式的 Excel 文件(即 Office 97-2003 版本)。用于读取和写入旧版本的 Excel 文件。
5.NPOI.SS.UserModel: 提供了处理 Excel 文件的通用接口,包括 IWorkbook、ISheet 和 IRow 等接口,适用于各种格式的 Excel 文件。

基本功能

1.Excel 文件操作

  • 读取 Excel 文件: 通过 NPOI 读取 .xls 和 .xlsx 文件的数据,包括单元格内容、行和列的索引等。
  • 写入 Excel 文件: 可以创建新的 Excel 文件或修改现有文件,包括设置单元格的格式、字体、颜色等。
  • 数据操作: 读取和写入单元格内容,操作行和列,插入和删除行列,合并单元格等。
  • 样式和格式: 设置单元格的样式,包括字体、颜色、边框、对齐方式等。
    2.Word 文件操作
  • 读取 Word 文件: 获取 .doc 和 .docx 文件中的文本、表格、段落等。
  • 写入 Word 文件: 创建新的 Word 文档或修改现有文档,包括添加文本、表格、图片等。
  • 格式设置: 设置段落格式、字体样式、字体大小、文本颜色等。
    3.PowerPoint 文件操作
  • 读取 PowerPoint 文件: 提取 .ppt 和 .pptx 文件中的幻灯片内容、文本、图片等。
  • 写入 PowerPoint 文件: 创建新的 PowerPoint 演示文稿或修改现有的演示文稿,包括添加幻灯片、设置幻灯片的内容和样式等。

示例代码

读取 Excel 文件的示例

using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;  // 对于 .xlsx 格式
// using NPOI.HSSF.UserModel;  // 对于 .xls 格式

class Program
{
    static void Main()
    {
        string filePath = "your_file_path.xlsx";
        
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            IWorkbook workbook = new XSSFWorkbook(fileStream);  // 对于 .xlsx 文件
            ISheet sheet = workbook.GetSheetAt(0);
            foreach (IRow row in sheet)
            {
                foreach (ICell cell in row)
                {
                    Console.Write($"{cell.ToString()} ");
                }
                Console.WriteLine();
            }
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

写入 Excel 文件的示例

using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;  // 对于 .xlsx 格式
// using NPOI.HSSF.UserModel;  // 对于 .xls 格式

class Program
{
    static void Main()
    {
        string filePath = "your_file_path.xlsx";
        
        IWorkbook workbook = new XSSFWorkbook();
        ISheet sheet = workbook.CreateSheet("Sheet1");
        
        IRow row = sheet.CreateRow(0);
        ICell cell = row.CreateCell(0);
        cell.SetCellValue("Hello, NPOI!");
        
        using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            workbook.Write(fileStream);
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

这些示例展示了如何使用 NPOI 进行基本的文件读写操作。如果你需要更详细的文档或具体功能的实现,可以参考 NPOI 的 官方文档 或其 GitHub 页面。