NPOI 整理

公共方法

using Microsoft.EntityFrameworkCore.Storage;

using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace NpoiDemo.Common
{
    using S = String;
    public class NpoiHelper
    {
        //code here
    }
}

CreateBasicBook

/// <summary>
/// 创建book的基础方法
/// </summary>
public static void CreateBasicBook()
{
    //2003格式
    var book = new HSSFWorkbook();
    var sheet = book.CreateSheet("book");
    var row = sheet.CreateRow(0);
    var cell = row.CreateCell(0);
    var cellStyle = book.CreateCellStyle();
    var font = book.CreateFont();
}

SetBorderStyle

/// <summary>
/// 设置单元格边框线,默认Thin
/// </summary>
/// <param name="cellStyle"></param>
public static void SetBorderStyle(ICellStyle cellStyle)
{
    cellStyle.BorderBottom = cellStyle.BorderLeft = cellStyle.BorderRight = cellStyle.BorderTop = BorderStyle.Thin;
}

/// <summary>
/// 设置单元格边框线,需要传入borderStyle
/// </summary>
/// <param name="cellStyle"></param>
public static void SetBorderStyle(ICellStyle cellStyle, BorderStyle border)
{
    cellStyle.BorderBottom = cellStyle.BorderLeft = cellStyle.BorderRight = cellStyle.BorderTop = border;
}

SetBackground

/// <summary>
/// 设置前景色和背景色
/// </summary>
/// <param name="cellStyle"></param>
/// <param name="foreColor">HSSFColor.Black.Index</param>
/// <param name="bgColor"></param>
public static void SetBackground(ICellStyle cellStyle, short foreColor, short bgColor)
{
    cellStyle.FillBackgroundColor = foreColor;
    cellStyle.FillForegroundColor = bgColor;
    cellStyle.FillPattern = FillPattern.SolidForeground;
}

GetColourByRGB

/// <summary>
/// 通过RGB获取颜色索引
/// </summary>
/// <param name="workbook"></param>
/// <param name="r"></param>
/// <param name="g"></param>
/// <param name="b"></param>
/// <returns></returns>
public static short GetColourByRGB(HSSFWorkbook workbook, byte r, byte g, byte b)
{
    var palette = workbook.GetCustomPalette();
    var hssfColor = palette.FindColor(r, g, b);
    if (hssfColor == null)
    {
        palette.SetColorAtIndex(HSSFColor.Lavender.Index, r, g, b);
        hssfColor = palette.GetColor(HSSFColor.Lavender.Index);
    }
    if (hssfColor != null)
    {
        return hssfColor.Indexed;
    }
    else
    {
        return short.MinValue;
    }
}

SetFont

/// <summary>
/// 设置字体
/// </summary>
/// <param name="workbook">book对象</param>
/// <param name="cellStyle">单元格对象</param>
/// <param name="fontName">字体名称</param>
/// <param name="size">字体大小</param>
/// <param name="isBold">加粗</param>
/// <param name="isItalic">加谢</param>
/// <param name="underlineType">下划线</param>
public static void SetFont(HSSFWorkbook workbook, ICellStyle cellStyle, S fontName = "等线",
    double size = 10, bool isBold = false, bool isItalic = false,
    FontUnderlineType underlineType = FontUnderlineType.None)
{
    var font = workbook.CreateFont();
    font.FontName = fontName;
    font.FontHeightInPoints = size;
    font.IsBold = isBold;
    font.IsItalic = isItalic;
    font.Underline = underlineType;
    cellStyle.SetFont(font);
}

SetAutoSizeColumn

/// <summary>
/// 自适应列宽
/// </summary>
/// <param name="sheet">表格对象</param>
/// <param name="totalCols">总共的列数</param>
public static void SetAutoSizeColumn(ISheet sheet, int totalCols)
{
    Enumerable.Range(0, totalCols).ToList().ForEach(x =>
    {
        sheet.AutoSizeColumn(x);
    });
}

UnionCells

/// <summary>
/// 指定区域合并单元格,都是闭区间,索引0开始
/// </summary>
/// <param name="sheet">表格对象</param>
/// <param name="firstRowIndex">开始行</param>
/// <param name="lastRowIndex">结束行</param>
/// <param name="firstColIndex">开始列</param>
/// <param name="lastColIndex">结束列</param>
public static void UnionCells(ISheet sheet, int firstRowIndex, int lastRowIndex, int firstColIndex, int lastColIndex)
{
    sheet.AddMergedRegion(new CellRangeAddress(firstRowIndex, lastRowIndex, firstColIndex, lastColIndex));
}

SetAutoFilter

/// <summary>
/// 数据自动筛选
/// </summary>
/// <param name="sheet">表格对象</param>
/// <param name="reference">单元格的引用字符串表达方式</param>
public static void SetAutoFilter(ISheet sheet, S reference)
{
    sheet.SetAutoFilter(CellRangeAddress.ValueOf(reference));
}

SetRowHeight

/// <summary>
/// 设置行高
/// </summary>
/// <param name="row">Irow对象</param>
/// <param name="height">高度</param>
public static void SetRowHeight(IRow row, float height)
{
    row.HeightInPoints = height;
}

SetAlignment

/// <summary>
/// 设置单元格的水平和垂直对齐方式
/// </summary>
/// <param name="cell"></param>
/// <param name="horizontal"></param>
/// <param name="vertical"></param>
public static void SetAlignment(ICellStyle cell, HorizontalAlignment horizontal, VerticalAlignment vertical)
{
    cell.Alignment = horizontal;
    cell.VerticalAlignment = vertical;
}

SetFormula

/// <summary>
/// 公式设置
/// </summary>
/// <param name="cell">单元格</param>
/// <param name="formula">excel的计算公式就行</param>
public static void SetFormula(ICell cell, S formula)
{
    //$"SUM(A1,A3)"
    cell.SetCellFormula(formula);
}

SetColumnWidth

/// <summary>
/// 设置列宽,列宽按照字符进行计算的所以有个固定字符256
/// </summary>
/// <param name="sheet"></param>
/// <param name="colIndex"></param>
/// <param name="colwidthChar"></param>
public static void SetColumnWidth(ISheet sheet, int colIndex, int colwidthChar)
{
    sheet.SetColumnWidth(colIndex, colwidthChar * 256);
}

完整代码

using Microsoft.EntityFrameworkCore.Storage;

using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace NpoiDemo.Common
{
    using S = String;
    public class NpoiHelper
    {
        /// <summary>
        /// 创建book的基础方法
        /// </summary>
        public static void CreateBasicBook()
        {
            //2003格式
            var book = new HSSFWorkbook();
            var sheet = book.CreateSheet("book");
            var row = sheet.CreateRow(0);
            var cell = row.CreateCell(0);
            var cellStyle = book.CreateCellStyle();
            var font = book.CreateFont();
        }

        /// <summary>
        /// 设置单元格边框线,需要传入borderStyle
        /// </summary>
        /// <param name="cellStyle"></param>
        public static void SetBorderStyle(ICellStyle cellStyle, BorderStyle border)
        {
            cellStyle.BorderBottom = cellStyle.BorderLeft = cellStyle.BorderRight = cellStyle.BorderTop = border;
        }
        /// <summary>
        /// 设置单元格边框线,默认Thin
        /// </summary>
        /// <param name="cellStyle"></param>
        public static void SetBorderStyle(ICellStyle cellStyle)
        {
            cellStyle.BorderBottom = cellStyle.BorderLeft = cellStyle.BorderRight = cellStyle.BorderTop = BorderStyle.Thin;
        }
        /// <summary>
        /// 设置前景色和背景色
        /// </summary>
        /// <param name="cellStyle"></param>
        /// <param name="foreColor">HSSFColor.Black.Index</param>
        /// <param name="bgColor"></param>
        public static void SetBackground(ICellStyle cellStyle, short foreColor, short bgColor)
        {
            cellStyle.FillBackgroundColor = foreColor;
            cellStyle.FillForegroundColor = bgColor;
            cellStyle.FillPattern = FillPattern.SolidForeground;
        }
        /// <summary>
        /// 通过RGB获取颜色索引
        /// </summary>
        /// <param name="workbook"></param>
        /// <param name="r"></param>
        /// <param name="g"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public static short GetColourByRGB(HSSFWorkbook workbook, byte r, byte g, byte b)
        {
            var palette = workbook.GetCustomPalette();
            var hssfColor = palette.FindColor(r, g, b);
            if (hssfColor == null)
            {
                palette.SetColorAtIndex(HSSFColor.Lavender.Index, r, g, b);
                hssfColor = palette.GetColor(HSSFColor.Lavender.Index);
            }
            if (hssfColor != null)
            {
                return hssfColor.Indexed;
            }
            else
            {
                return short.MinValue;
            }
        }

        /// <summary>
        /// 设置字体
        /// </summary>
        /// <param name="workbook">book对象</param>
        /// <param name="cellStyle">单元格对象</param>
        /// <param name="fontName">字体名称</param>
        /// <param name="size">字体大小</param>
        /// <param name="isBold">加粗</param>
        /// <param name="isItalic">加谢</param>
        /// <param name="underlineType">下划线</param>
        public static void SetFont(HSSFWorkbook workbook, ICellStyle cellStyle, S fontName = "等线",
            double size = 10, bool isBold = false, bool isItalic = false,
            FontUnderlineType underlineType = FontUnderlineType.None)
        {
            var font = workbook.CreateFont();
            font.FontName = fontName;
            font.FontHeightInPoints = size;
            font.IsBold = isBold;
            font.IsItalic = isItalic;
            font.Underline = underlineType;
            cellStyle.SetFont(font);
        }

        /// <summary>
        /// 自适应列宽
        /// </summary>
        /// <param name="sheet">表格对象</param>
        /// <param name="totalCols">总共的列数</param>
        public static void SetAutoSizeColumn(ISheet sheet, int totalCols)
        {
            Enumerable.Range(0, totalCols).ToList().ForEach(x =>
            {
                sheet.AutoSizeColumn(x);
            });
        }

        /// <summary>
        /// 指定区域合并单元格,都是闭区间,索引0开始
        /// </summary>
        /// <param name="sheet">表格对象</param>
        /// <param name="firstRowIndex">开始行</param>
        /// <param name="lastRowIndex">结束行</param>
        /// <param name="firstColIndex">开始列</param>
        /// <param name="lastColIndex">结束列</param>
        public static void UnionCells(ISheet sheet, int firstRowIndex, int lastRowIndex, int firstColIndex, int lastColIndex)
        {
            sheet.AddMergedRegion(new CellRangeAddress(firstRowIndex, lastRowIndex, firstColIndex, lastColIndex));
        }

        /// <summary>
        /// 数据自动筛选
        /// </summary>
        /// <param name="sheet">表格对象</param>
        /// <param name="reference">单元格的引用字符串表达方式</param>
        public static void SetAutoFilter(ISheet sheet, S reference)
        {
            sheet.SetAutoFilter(CellRangeAddress.ValueOf(reference));
        }

        /// <summary>
        /// 设置行高
        /// </summary>
        /// <param name="row">Irow对象</param>
        /// <param name="height">高度</param>
        public static void SetRowHeight(IRow row, float height)
        {
            row.HeightInPoints = height;
        }
        /// <summary>
        /// 设置单元格的水平和垂直对齐方式
        /// </summary>
        /// <param name="cell"></param>
        /// <param name="horizontal"></param>
        /// <param name="vertical"></param>
        public static void SetAlignment(ICellStyle cell, HorizontalAlignment horizontal, VerticalAlignment vertical)
        {
            cell.Alignment = horizontal;
            cell.VerticalAlignment = vertical;
        }

        /// <summary>
        /// 公式设置
        /// </summary>
        /// <param name="cell">单元格</param>
        /// <param name="formula">excel的计算公式就行</param>
        public static void SetFormula(ICell cell, S formula)
        {
            //$"SUM(A1,A3)"
            cell.SetCellFormula(formula);
        }
        /// <summary>
        /// 设置列宽,列宽按照字符进行计算的所以有个固定字符256
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="colIndex"></param>
        /// <param name="colwidthChar"></param>
        public static void SetColumnWidth(ISheet sheet, int colIndex, int colwidthChar)
        {
            sheet.SetColumnWidth(colIndex, colwidthChar * 256);
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值