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