[底部更新]
我想做的事情:为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]);
}
}