程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 基於NPOI導出Excel,NPOI導出Excel

基於NPOI導出Excel,NPOI導出Excel

編輯:C#入門知識

基於NPOI導出Excel,NPOI導出Excel


在上一篇文章[關於大數據的查詢與導出]中,提到了使用NPOI組件導出Excel,本想上次一起分享給大家,無奈最近比較忙,今天抽空整理了下,分享出來.

  • 根據以上分析,我們簡單畫一下這個功能的UML圖,以方便理解.
    復制代碼
    /// <summary>
    /// 導出接口
    /// </summary>
    public interface IExport
    {
        /// <summary>
        /// 導出數據,基於模板文件處理替換後,保存為一個新文件
        /// </summary>
        /// <param name="templateFile">模板文件</param>
        /// <param name="targetFile">目標文件</param>
        /// <param name="fromater">模板格式化處理規則</param>
        void Export(string templateFile, string targetFile, ExportFormater fromater);
    
        /// <summary>
        /// 導出數據,基於模板文件處理替換後,保存為一個新文件
        /// </summary>
        /// <typeparam name="T">數據源類型</typeparam>
        /// <param name="templateFile">模板文件</param>
        /// <param name="targetFile">目標文件</param>
        /// <param name="formater">模板格式化處理規則</param>
        /// <param name="source">數據源</param>
        void Export<T>(string templateFile, string targetFile,
            ExportFormater<T> formater, IList<T> source) where T : class;
    
        /// <summary>
        /// 以追加的形式,將數據添加到已存在的文件中
        /// </summary>
        /// <typeparam name="T">數據源類型</typeparam>
        /// <param name="targetFile">目標文件</param>
        /// <param name="formater">模板格式化處理規則</param>
        /// <param name="source">數據源</param>
        void ExportByAppend<T>(string targetFile, ExportFormater<T> formater,
            IList<T> source) where T : class;
    }
    復制代碼
  • 散列單元格格式處理器 復制代碼
    /// <summary>
     /// 散列單元格數據格式器
     /// </summary>
     public class DispersedCellFormater
     {
         /// <summary>
         /// 單元格坐標
         /// </summary>
         public Point CellPoint { get; set; }
    
         /// <summary>
         /// 格式化字符串
         /// </summary>
         public string FormaterString { get; set; }
    
         /// <summary>
         /// 格式化數據
         /// </summary>
         public object CellValue { get; set; }
    
         /// <summary>
         /// 實例化
         /// </summary>
         public DispersedCellFormater()
         {
    
         }
    
         /// <summary>
         /// 實例化
         /// </summary>
         /// <param name="x">cell 橫坐標</param>
         /// <param name="y">cell 縱坐標</param>
         /// <param name="formatStr">格式化字符串</param>
         /// <param name="val">替換值</param>
         public DispersedCellFormater(int x, int y, string formatStr, object val)
            {
                this.CellPoint = new Point(x, y);
                this.FormaterString = formatStr;
                this.CellValue = val;
            }
     }
    復制代碼
  • 圖片單元格格式處理器 復制代碼
    /// <summary>
     /// 圖片Cell格式化器
     /// </summary>
     public class ImageCellFormater
     {
         /// <summary>
         /// 單元格位置
         /// </summary>
         public Point CellPoint { get; set; }
    
         /// <summary>
         /// 顯示圖片
         /// </summary>
         public Image Img { get; set; }
    
         /// <summary>
         /// 實例化
         /// </summary>
         public ImageCellFormater()
            {
    
            }
    
         /// <summary>
         /// 實例化
         /// </summary>
         /// <param name="x">cell橫坐標</param>
         /// <param name="y">cell縱坐標</param>
         /// <param name="img">圖片</param>
         public ImageCellFormater(int x, int y, Image img)
         {
             this.CellPoint = new Point(x, y);
             this.Img = img;
         }
     }
    復制代碼
  • 明細區單元格格式處理器 復制代碼
    /// <summary>
    /// 明細單元格取值規則
    /// <typeparam name="T">數據類型</typeparam>
    /// </summary>
    public class DetailCellValueFormater<T> where T : class
    {
        /// <summary>
        /// 列索引
        /// </summary>
        public int Index { get; set; }
    
        /// <summary>
        /// 取值函數
        /// </summary>
        public Func<T, object> Value { get; set; }
    
        /// <summary>
        /// 實例化
        /// </summary>
        public DetailCellValueFormater()
        {
    
        }
    
        /// <summary>
        /// 實例化
        /// </summary>
        /// <param name="index">列索引</param>
        /// <param name="val">數據</param>
        public DetailCellValueFormater(int index, Func<T, object> val)
        {
            this.Index = index;
            this.Value = val;
        }
    }
    復制代碼
  • 接下來一起看下導出格式處理集合的定義. 復制代碼
    /// <summary>
    /// 用於描述導出格式化數據
    /// </summary>
    public class ExportFormater
    {
        /// <summary>
        /// 散列單元格替換規格
        /// </summary>
        public List<DispersedCellFormater> DispersedCellFormaters { get; private set; }
    
        /// <summary>
        /// 圖片單元格格式化規則
        /// </summary>
        public List<ImageCellFormater> ImageCellFormaters { get; private set; }
    
        /// <summary>
        /// 明細數據起始行索引
        /// </summary>
        public int DetailRowBeginIndex { get; set; }
    
        /// <summary>
        /// 實例化
        /// </summary>
        public ExportFormater()
        {
            DispersedCellFormaters = new List<DispersedCellFormater>();
            ImageCellFormaters = new List<ImageCellFormater>();
        }
    }
    /// <summary>
    /// 用於描述導出格式化數據,帶有明細區數據取值規則
    /// </summary>
    public class ExportFormater<T> : ExportFormater where T : class
    {
        /// <summary>
        /// 明細區取值函數
        /// </summary>
        public List<DetailCellValueFormater<T>> DetailCellValueFormaters { get; private set; }
    
        /// <summary>
        /// 實例化
        /// </summary>
        public ExportFormater()
        {
            DetailCellValueFormaters = new List<DetailCellValueFormater<T>>();
        }
    }
    復制代碼
  • 接下來我們簡單看下導出的具體實現.
  • 結語:

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