使用NPOI的CellStyle静态值初始化



[底部更新]

我想做的事情:CellStyles创建一个具有static readonly值的类,这样我就可以让构建excel文件的代码如下所示:

ICellStyle headerStyle1 = workbook.CreateCellStyle();
headerStyle1 = ExcelStyles.header1;

而不是这样:

headerStyle1.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
headerStyle1.BorderTop = NPOI.SS.UserModel.BorderStyle.Medium;
headerStyle1.BorderLeft = NPOI.SS.UserModel.BorderStyle.Medium;
headerStyle1.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;

这将使它更容易阅读,理解和维护以后

到目前为止我所拥有的:我制作了一个名为ExcelStyles.cs的类,我计划在其中使用public static readonly变量,这样我就可以调用我需要的变量。我知道如何使用方法来实现这一点,但理论上,将它们直接作为CellStyle对象应该会让以后的事情变得更容易。这段代码是我试图做的,但显然不起作用,因为这不是正确的语法/方法。

class ExcelStyles
{
public static readonly ICellStyle header1 = 
{ 
header1.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderTop = NPOI.SS.UserModel.BorderStyle.Medium;
}
}

问题:我不知道如何正确地执行此操作,有一段时间我一直在想该如何搜索,但没有取得多大成功,我也不知道是否可以使用NPOI

我使用的是:Visual Studio 2019,Windows Forms,C#,.NET Framework 4.7.2,NPOI 2.5.3,它是一个桌面应用程序

更新:经过更多的修改,我得到了这个代码:

class ExcelStyles
{
public static readonly ICellStyle header1 = ((XSSFWorkbook)new XSSFWorkbook()).CreateCellStyle();
static ExcelStyles()
{
header1.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderTop = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderLeft = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
header1.FillPattern = FillPattern.SolidForeground;
header1.VerticalAlignment = VerticalAlignment.Center;
}
}

我这样称呼它:

ICellStyle headerStyle1 = workbook.CreateCellStyle();
headerStyle1.CloneStyleFrom(ExcelStyles.header1);

因此,问题发生了变化,到目前为止,经过测试,这与预期一样有效,但我担心((XSSFWorkbook)new XSSFWorkbook()).CreateCellStyle()可能会导致意外问题。有更干净的方法吗?

最终这样做就是解决方案。

public static readonly ICellStyle header1 = new XSSFWorkbook().CreateCellStyle();
static ExcelStyles()
{
header1.FillPattern = FillPattern.SolidForeground;
header1.FillForegroundColor = color;
header1.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderTop = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderLeft = NPOI.SS.UserModel.BorderStyle.Medium;
header1.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
header1.VerticalAlignment = VerticalAlignment.Center;
header1.Alignment = HorizontalAlignment.Left;
}

然后这个应用

ICellStyle headerStyle1 = workbook.CreateCellStyle();
headerStyle1.CloneStyleFrom(ExcelStyles.header1);```

还有一个选项是使用枚举和字典。

public enum TextType
{
Header1,
...
}

public class ExcelStyles
{
public static Dictionary<TextType, CellStyle> CreateDefaultStyels(HSSFWorkbook hssfworkbook)
{
{
CellStyle style = hssfworkbook.CreateCellStyle();
style.SetFont(getFont(12, 3000, false, false));
style.FillForegroundColor = HSSFColor.GREY_25_PERCENT.index;
style.FillPattern = FillPatternType.SOLID_FOREGROUND;
style.VerticalAlignment = VerticalAlignment.CENTER;
styles.Add(TextType.Header1, style);
}
}
}

你可以这样使用它:

public MyExcelReport
{
private Dictionary<TextType, CellStyle> Styles { get; set; }
MyExcelReport()
{
Styles = ExcelStyles.CreateDefaultStyels(Hssfworkbook);
}

public void Set()
{
AddCell("Simple text", 0, NextRow, Styles[TextType.Header1]);
}
}

相关内容

  • 没有找到相关文章

最新更新