使用NPOI在C#中处理Excel和Word文件

在C#开发中,处理Microsoft Office文件(如Excel和Word)是一个常见的需求。NPOI是一个强大的开源库,它基于Apache POI项目,为.NET平台提供了读取和写入这些文件的能力。本文将介绍如何使用NPOI在C#中处理Excel和Word文件,并提供一些示例代码。

1. 什么是NPOI?

NPOI是一个.NET库,用于读取和写入Microsoft Office格式文件,包括Excel (.xls, .xlsx)和Word (.doc, .docx)。NPOI使开发者可以在不依赖于Office组件的情况下操作Office文件,非常适合在服务器端应用中使用。

2. 安装NPOI

在开始之前,你需要在你的项目中安装NPOI。可以通过NuGet包管理器来安装。打开Visual Studio的“包管理器控制台”,然后运行以下命令:

Install-Package NPOI
2.1 VisualStudio2019引入NPOI

C#使用NPOI进行Excel和Word文件处理(二)-LMLPHP

3. 处理Excel文件
读取Excel文件

以下示例展示了如何读取Excel文件并输出其内容:

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

class Program
{
    static void Main(string[] args)
    {
        string filePath = "example.xlsx";

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

            for (int row = 0; row <= sheet.LastRowNum; row++)
            {
                IRow currentRow = sheet.GetRow(row);

                for (int col = 0; col < currentRow.LastCellNum; col++)
                {
                    ICell cell = currentRow.GetCell(col);
                    Console.Write(cell.ToString() + "\t");
                }
                Console.WriteLine();
            }
        }
    }
}
写入Excel文件

以下示例展示了如何创建并写入一个新的Excel文件:

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

class Program
{
    static void Main(string[] args)
    {
        IWorkbook workbook = new XSSFWorkbook();
        ISheet sheet = workbook.CreateSheet("Sheet1");

        IRow row = sheet.CreateRow(0);
        row.CreateCell(0).SetCellValue("Name");
        row.CreateCell(1).SetCellValue("Age");

        row = sheet.CreateRow(1);
        row.CreateCell(0).SetCellValue("John Doe");
        row.CreateCell(1).SetCellValue(30);

        using (FileStream file = new FileStream("output.xlsx", FileMode.Create, FileAccess.Write))
        {
            workbook.Write(file);
        }
    }
}
4. 处理Word文件
读取Word文件

以下示例展示了如何读取Word文件并输出其内容:

using System;
using System.IO;
using NPOI.XWPF.UserModel;

class Program
{
    static void Main(string[] args)
    {
        string filePath = "example.docx";

        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            XWPFDocument doc = new XWPFDocument(file);
            foreach (var para in doc.Paragraphs)
            {
                Console.WriteLine(para.Text);
            }
        }
    }
}
写入Word文件

以下示例展示了如何创建并写入一个新的Word文件:

using System;
using System.IO;
using NPOI.XWPF.UserModel;

class Program
{
    static void Main(string[] args)
    {
        XWPFDocument doc = new XWPFDocument();
        XWPFParagraph para = doc.CreateParagraph();
        XWPFRun run = para.CreateRun();
        run.SetText("Hello, World!");

        using (FileStream file = new FileStream("output.docx", FileMode.Create, FileAccess.Write))
        {
            doc.Write(file);
        }
    }
}

总结

通过NPOI,你可以轻松地在C#中处理Excel和Word文件,无需依赖Office组件。本文提供的示例代码展示了如何读取和写入这些文件的基本操作。你可以根据自己的需求扩展这些示例,以实现更多功能。

希望这篇文章能帮助你更好地理解如何在C#中使用NPOI进行Excel和Word文件的处理。如果你有任何问题或建议,欢迎在评论区留言讨论。

Github 地址链接

https://github.com/nissl-lab/npoi-examples.git
https://github.com/nissl-lab/npoi.git

参考例子

 try
            {
                string fileName = Application.StartupPath + @"\aramexConfig\docx\templateWord.docx";//模板
                Dictionary<string, object> aramexShippmentMap = (Dictionary<string, object>)obj;
                AramexShippment aramexShippment = (AramexShippment)aramexShippmentMap["aramexShippment"];
                string wordPath = aramexShippmentMap["wordPath"].ToString();
                string wordToPngName = aramexShippmentMap["wordToPngName"].ToString();
                if (File.Exists(wordPath + wordToPngName + ".JPG"))
                {//文件存在就删除
                    File.Delete(wordPath + wordToPngName + ".JPG");
                }
                //string saveFile = @"D:\testPng\案例1.docx";
                XWPFDocument document = null;
                using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
                {
                    document = new XWPFDocument(file);//将模板加载进新的word中
                }
                #region 表格
                document.Tables[0].Rows[0].GetCell(1).SetText("test1");
                document.Tables[0].Rows[1].GetCell(1).SetText("test2");
                document.Tables[0].Rows[2].GetCell(1).SetText("test3");
                document.Tables[0].Rows[3].GetCell(1).SetText(DateTime.Now.ToString("yyyy-MM-dd"));
 
                document.Tables[0].Rows[4].GetCell(1).SetText("test4");
                document.Tables[0].Rows[0].GetCell(4).SetText("test5");
                #endregion 
//保留到本地
                //FileStream fs = new FileStream(wordPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                //document.Write(fs);
                //fs.Close();
                //document.Close();
//保留到缓存流中
                MemoryStream stream = new MemoryStream();
                document.Write(stream);
                stream.Close();
                document.Close();
 
            }
            catch (Exception ex)
            {
                string error = ex.Message.ToString();
            }
08-07 06:05