C# 使用NPOI出现超过最大字体数和单元格格式变成一样的解决

时间:2020-12-18 01:08:30

在使用NPOI写入Excel文件的时候出现“它已经超出最多允许的字体数”,查询资料发现是字体创建太多的原因,需要将常用字体创建好,传入CellStyle中。参考(http://www.cnblogs.com/sxdcgaq8080/p/7686895.html)

同时在修改的过程中,设置CellStyle出现了同一行设置不同的单元格格式,但是最后一整行的单元格样式都和最后一个设置的一样的问题。原因是获取cell.CellStyle直接进行设置,这时获取的全局默认的CellStyle也就影响到了其他单元格获取CellStyle进行设置,这就导致最后一个单元格设置的格式成为整行单元格的格式。参考(http://www.cnblogs.com/kingsleylam/p/5361365.html)

一下给我一个在我工程中为了解决这个问题实现的简单的类,用于在当前Workbook中获取设置好的字体和单元格样式:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel; namespace GenerateResult
{
class CellStyleHandle2
{
IWorkbook workBook ;
IFont defaultFont;
ICellStyle defaultCellStyle;
ICellStyle defaultCellStyleCenter;
ICellStyle defaultCellStyleRight; IFont defaultFontColor;//蓝色
ICellStyle defaultCellStyleRightColor;//蓝色 public CellStyleHandle2(IWorkbook workBook)
{
this.workBook = workBook;
} public IFont getDefaultFont()
{
if (null == defaultFont)
{
defaultFont = workBook.CreateFont();//内容输出用
//设置字体加粗样式
defaultFont.FontName = "宋体";
defaultFont.IsBold = false;
defaultFont.FontHeightInPoints = ;
defaultFont.Color = ;
}
return defaultFont;
} public ICellStyle getDefaultCellStyle()
{
if (null == defaultCellStyle)
{
defaultCellStyle = workBook.CreateCellStyle();
defaultCellStyle.Alignment = HorizontalAlignment.Left;
defaultCellStyle.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyle.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyle.SetFont(getDefaultFont());
}
return defaultCellStyle;
} public ICellStyle getDefaultCellStyleCenter()
{
if (null == defaultCellStyleCenter)
{
defaultCellStyleCenter = workBook.CreateCellStyle();
defaultCellStyleCenter.Alignment = HorizontalAlignment.Center;
defaultCellStyleCenter.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyleCenter.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyleCenter.SetFont(getDefaultFont());
}
return defaultCellStyleCenter;
} public ICellStyle getDefaultCellStyleRight()
{
if (null == defaultCellStyleRight)
{
defaultCellStyleRight = workBook.CreateCellStyle();
defaultCellStyleRight.Alignment = HorizontalAlignment.Right;
defaultCellStyleRight.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyleRight.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyleRight.SetFont(getDefaultFont());
}
return defaultCellStyleRight;
} public IFont getDefaultFontColor()
{
if (null == defaultFontColor)
{
defaultFontColor = workBook.CreateFont();//内容输出用
//设置字体加粗样式
defaultFontColor.FontName = "宋体";
defaultFontColor.IsBold = false;
defaultFontColor.FontHeightInPoints = ;
defaultFontColor.Color = ;
}
return defaultFontColor;
} public ICellStyle getDefaultCellStyleRightColor()
{
if (null == defaultCellStyleRightColor)
{
defaultCellStyleRightColor = workBook.CreateCellStyle();
defaultCellStyleRightColor.Alignment = HorizontalAlignment.Right;
defaultCellStyleRightColor.VerticalAlignment = VerticalAlignment.Center;
defaultCellStyleRightColor.WrapText = true; ////使用SetFont方法将字体样式添加到单元格样式中
defaultCellStyleRightColor.SetFont(getDefaultFontColor());
}
return defaultCellStyleRightColor;
}
}
}

只针对当前Workbook有效。