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
總結
- 上一篇: 了解动态链接(六)—— 重定位表
- 下一篇: 【hadoop】有参考价值的博客整理