文章目录
- 使用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();}