NPOI高效生成Excel和Word
1、什么是NPOI
NPOI是POI库的 .NET版本,十分强大的一个.NET库,这是一个开源项目旨在帮助开发人员在不依赖Microsoft Office组件的情况下,直接读写Office格式的文档。
目前支持的文档格式有如下:
- Excel:xls和xlsx
- Word:doc和docx
- PowerPoint:ppt和pptx
核心功能
- 创建新的Excel或Word文档
- 读取现有文档
- 修改文档内容
- 单元格格式化
- 支持图表生成
- ……
安装NPOI的nuget包
InStall-Package NPOI
2、Excel
1、引用命名空间
using NPOI.HSSF.UserModel; // 用于.xls格式
using NPOI.XSSF.UserModel; // 用于.xlsx格式
using NPOI.SS.UserModel; // 公共接口
2、主要流程
using(var workbook = new XSSFWorkBook()) //创建工作薄
{
//创建工作表
ISheet sheet = workbook.CreateSheet("sheet1");
//创建行
IRow row = sheet.CreateRow(0);
//创建单元格
ICell cell = row.CreateCell(0);
cell.SetCellValue("hello world");
using (var ms = new MemoryStream())
{
workbook.Write(ms);
return ms.ToArray();
}
}
通过上所述步骤,就可以开始使用npoi去创建一个十分简单的excel文件了,但是在实际情况中这样的excel文件可以不能满足我们的需求,可能还需要去对excel的单元格进行合并、设置字体字号的需求,接下来是对npoi创建文件的一些进阶操作
//创建单元格样式
var style = workbook.CreateCellStyle();
// 设置背景色
style.FillForegroundColor = IndexedColors.LightYellow.Index;
style.FillPattern = FillPattern.SolidForeground;
//设置字体为居中
style.Alignment = HorizontalAlignment.Center;
style.VerticalAlignment = VerticalAlignment.Center;
//设置为粗体
var Font = workbook.CreateFont();
Font.FontHeightInPoints = 20;
Font.Boldweight = (short)FontBoldWeight.Bold;
style.SetFont(Font);
//应用到单元格
cell.CellStyle = style
//公式
cell.SetCellFormula("SUM(A1:A10)");
//设置列宽
sheet.SetColumnWidth(i, 20 * 256);
//合并单元格
sheet.AddMergedRegion(new CellRangeAddress(0,0,0,5));//(开始行,结束行,开始列,结束列)
图表创建
// 创建图表
IDrawing drawing = sheet.CreateDrawingPatriarch();
//图标位置,前四个是起始单元格的偏移量,后四个是结束单元格的位置
IClientAnchor anchor = drawing.CreateAnchor(0, 0, 0, 0, 0, 5, 10, 15);
//创建图表对象
IChart chart = drawing.CreateChart(anchor);
//创建图表图例
IChartLegend legend = chart.GetOrCreateLegend();
legend.Position = LegendPosition.TopRight;
// 创建折线图数据
ILineChartData<double, double> data = chart.ChartDataFactory.CreateLineChartData<double, double>();
// 创建轴
IChartAxis bottomAxis = chart.ChartAxisFactory.CreateCategoryAxis(AxisPosition.Bottom);
IChartAxis leftAxis = chart.ChartAxisFactory.CreateValueAxis(AxisPosition.Left);
leftAxis.Crosses = AxisCrosses.AutoZero;
// 加数据
IChartDataSource<string> xs = DataSources.FromStringCellRange(sheet, new CellRangeAddress(1, 2, 0, 0));
IChartDataSource<double> ys = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(1, 2, 1, 1));
chart.Plot(data,bottomAxis,leftAxis)
3、Word
1、引用命名空间
using NPOI.XWPF.UserModel;
2、使用流程
using (XWPFDocument doc = new XWPFDocument())
{
// 创建段落
XWPFParagraph p1 = doc.CreateParagraph();
//设置这一段的属性
XWPFRun r1 = p1.CreateRun();
r1.SetText("这是第一个段落");
r1.IsBold = true; // 加粗
r1.FontSize = 12; // 字体大小
r1.SetFontFamily("宋体"); // 字体
r1.SetColor("FF0000"); //字体颜色
// 创建第二个段落
XWPFParagraph p2 = doc.CreateParagraph();
XWPFRun r2 = p2.CreateRun();
r2.SetText("这是第二个段落");
//返回字节流
using (var ms = new MemoryStream())
{
workbook.Write(ms);
return ms.ToArray();
}
}
以上就是创建一个word文档的简单流程
进阶更多属性
// 创建段落
XWPFParagraph p1 = doc.CreateParagraph();
//设置这一段的属性
XWPFRun r1 = p1.CreateRun();
//控制段落与其他元素的上下距离
p1.SpacingBeforeLines = 20;
p1.SpacingAfterLines = 20;
// 设置段落对齐方式(可选)
p1.Alignment = ParagraphAlignment.CENTER;
// 下划线
r1.UnderlinePatterns = UnderlinePatterns.Single; // 单下划线
r1.UnderlinePatterns = UnderlinePatterns.Double; // 双下划线
// 删除线
r1.IsStrikeThrough = true; // 删除线
//换行
r1.AddBreak();
word中插入图片
XWPFRun run = paragraph.CreateRun();
using (FileStream picStream = new FileStream("image.png", FileMode.Open))
{
run.AddPicture(
picStream,//图片流
(int)PictureType.PNG,//图片类型,.JPEG .GIF .TIFF .BMP .PNG
"image.png", //文件名
Units.ToEMU(200), // 宽度
Units.ToEMU(100) // 高度
);
}

浙公网安备 33010602011771号