程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ExcelReport第三篇:擴展元素格式化器,excelreport第三篇

ExcelReport第三篇:擴展元素格式化器,excelreport第三篇

編輯:C#入門知識

ExcelReport第三篇:擴展元素格式化器,excelreport第三篇


導航

目   錄:基於NPOI的報表引擎——ExcelReport

上一篇:ExcelReport源碼解析

概述

上篇中已介紹了ExcelRepor的架構,本篇將通過例子講述如何擴展元素格式化器以滿足更多的需求。

示例

1)談談新需求:

如圖所示,一個單元格內包含多個參數。

2)實現代碼:

PartFormatter.cs:

/*
 類:PartFormatter
 描述:單元格局部(元素)格式化器
 編 碼 人:韓兆新 日期:2015年01月25日
 修改記錄:
*/
 
using System.Drawing;
using NPOI.SS.UserModel;
 
namespace ExcelReport
{
    public class PartFormatter:ElementFormatter
    {
        private Point _cellPoint;
        private string _parameterName;
        private string _value;
 
        public PartFormatter(Point cellPoint, string parameterName ,string value)
        {
            this._cellPoint = cellPoint;
            this._parameterName = parameterName;
            this._value = value;
        }
 
        public override void Format(SheetFormatterContext context)
        {
            var rowIndex = context.GetCurrentRowIndex(_cellPoint.X);
            var row = context.Sheet.GetRow(rowIndex);
            if (null == row)
            {
                row = context.Sheet.CreateRow(rowIndex);
            }
            var cell = row.GetCell(_cellPoint.Y);
            if (null == cell)
            {
                cell = row.CreateCell(_cellPoint.Y);
            }
            if (cell.CellType.Equals(CellType.String))
            {
                SetCellValue(cell, cell.StringCellValue.Replace(string.Format("$[{0}]", _parameterName), _value));
            }
        }
    }
}

(PartFormatter繼承ElementFormatter,實現Format方法)。

3)測試代碼:

//實例化一個參數容器,並加載模板填充規則文件
ParameterCollection collection = new ParameterCollection();
collection.Load(@"Template\Template.xml");
 
//實例化一個元素格式化器列表
List<ElementFormatter> formatters = new List<ElementFormatter>();
formatters.Add(new PartFormatter(collection["Sheet1", "Dept"],"Dept","物理"));
formatters.Add(new PartFormatter(collection["Sheet1", "Class"], "Class", "力學一"));
 
//導出文件到本地
Export.ExportToLocal(@"Template\Template.xls", saveFileDlg.FileName,
    new SheetFormatterContainer("Sheet1", formatters));

4)測試結果:

 

源碼下載:

下載地址:https://github.com/hanzhaoxin/ExcelReport

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved