zoukankan      html  css  js  c++  java
  • 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();//每次打印需要累加打印的位移量保证后面打印区域的打印模板位移是递增的

            }

     代码整理好后在发链接:

  • 相关阅读:
    怎么自定义修改CnBlogs博客园主题模板css样式
    前端怎么避免无效的请求,减轻服务器负载
    360浏览器奇葩问题:非得打开一次控制台才能登录(try catch finally 用法)
    react中<br/>不换行、多个&nbsp;只显示一个空格的问题 dangerouslySetInnerHTML
    webpack压缩文件错误:ERROR in bundle.js from UglifyJs
    webpack css单独打包 及extract-text-webpack-plugin插件
    css如何引入第三方字体
    计数排序
    接口
    抽象方法和抽象类
  • 原文地址:https://www.cnblogs.com/qianthinkover/p/4643293.html
Copyright © 2011-2022 走看看