当前位置: 首页 > news >正文

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

文章目录

      • 使用NPOI在C#中处理Excel和Word文件
        • 1. 什么是NPOI?
        • 2. 安装NPOI
          • 2.1 VisualStudio2019引入NPOI
        • 3. 处理Excel文件
          • 读取Excel文件
          • 写入Excel文件
        • 4. 处理Word文件
          • 读取Word文件
          • 写入Word文件
      • 总结
      • Github 地址链接
      • 参考例子

使用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

在这里插入图片描述

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();}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 房产中介小程序
  • C语言——结构体与共用体
  • Docker 网络代理配置及防火墙设置指南
  • 【云原生之kubernetes实战】在k8s环境下部署Note Mark笔记工具
  • 不仅能防沉迷游戏的防沉迷软件(Python)
  • 24/8/9算法笔记 决策树VS线性回归
  • 景联文科技:破解数据标注行业痛点,引领高质量AI数据服务
  • 二、Matlab图像处理基础
  • PDF隐写思路
  • 如何使用open ai实现全站语义搜索?
  • 游戏手柄开发一款游戏
  • Python 复习 日志2024/8/9
  • 系统编程 day7 文件6
  • 【JavaEE】CAS原理
  • Beyond Compare解锁版下载及安装 (文件和文件夹比较工具)
  • Apache Spark Streaming 使用实例
  • CEF与代理
  • Git同步原始仓库到Fork仓库中
  • Redis在Web项目中的应用与实践
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • spring-boot List转Page
  • windows下mongoDB的环境配置
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 排序算法之--选择排序
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端知识点整理(待续)
  •  一套莫尔斯电报听写、翻译系统
  • puppet连载22:define用法
  • Spring第一个helloWorld
  • ​flutter 代码混淆
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 计算机视觉入门
  • # 职场生活之道:善于团结
  • #if等命令的学习
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (55)MOS管专题--->(10)MOS管的封装
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (原创)可支持最大高度的NestedScrollView
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .net core + vue 搭建前后端分离的框架
  • .net core使用ef 6
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET gRPC 和RESTful简单对比
  • .Net Web项目创建比较不错的参考文章
  • .net打印*三角形
  • .Net的C#语言取月份数值对应的MonthName值
  • .net连接oracle数据库
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...