NPOI封装

 

一、对于Excel的操作封装主要针对对于Excel的写入的封装,对于打印基类的封装主要引入了两个概念

1、打印区域模板类

2、打印集合类

如实例模板中需要打印的区域模块

如实例模板中需要打印的集合类

 

二、打印模板类准备

对于一个Excel中的打印区域程序为这两种类的打印字段(属性)都加上指定的特性 [CellPosition(X = 1, Y = 2)]

X代表当前属性需要打印的行,Y代表当前属性所在的列

 

 

如果打印区域是集合类型的需要在当前类上加上特性   [CollectionTemplate(RowStartIndex = 29)]

代表当前打印模板在Excel中打印开始的行位置

三、打印

对于准备好的打印类的属性标示完相应的打印位置特性后开始打印

1、打印单实体模板

   private void PrintHeader(BudgetHeaderPrintTemplate data)

    {

            Type type = data.GetType();

            base.SetValue(type, data);

    }

2 打印集合类实体模板

 private void PrintOtherFabricList(List<BudgetOtherFabricPrintTemplate> lstData)

        {

            if (lstData.Count == 0)

            {

                return;

            }

            Type type = lstData.FirstOrDefault().GetType();

            var intXBase = base.GetRowStartIndex(type);

            decimal money =0;

            foreach (BudgetOtherFabricPrintTemplate item in lstData)

            {

                if (item.Summary != null)

                {

                    money = money + item.Summary.Value;

                }

            }

#region 统计行信息

            BudgetOtherFabricPrintTemplate tAllMoney = new BudgetOtherFabricPrintTemplate();

            tAllMoney.TemplateHasTax = "共计";

            tAllMoney.Summary = money;

            tAllMoney.Price = -1;

            tAllMoney.Num = -1;

            if (lstData.Count() > 1)

            {

                lstData.Add(tAllMoney);

            }

           #endregion

//集合打印

            lstData.ForEach(data =>

            {

                intXBase++;

                base.SetValue(type, data, intXBase , base.GetCopyRow(intXBase));

            });

 

            this.OffSet += lstData.Count();//每次打印需要累加打印的位移量保证后面打印区域的打印模板位移是递增的

        }

 

 

 代码整理好后在发链接:

转载于:https://www.cnblogs.com/qianthinkover/p/4643293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值