GridView匯出Excel(NPOI篇)[1]

2 篇文章 0 订阅
2 篇文章 0 订阅

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using System.Reflection;
using System.Text;
using EBIZ.Common.UI;
using System.Text.RegularExpressions;

namespace EBIZ.Common.Utility
{
    /// <summary>
    /// 輸出資料
    /// </summary>
    public class ExportData
    {
        private bool _enableShowHiddenField = false;

        private HSSFWorkbook _workBook;

        private GridView _gvData;

        private Dictionary<Color, IFont> _fontColors;

        private Dictionary<string, ICellStyle> _cellStyles;

        private Dictionary<int, short> _cellDataFormat;

        private Dictionary<string, short> _dataFormat;

        /// <summary>
        /// 是否充許顯示隱藏欄位
        /// </summary>
        public bool EnableShowHiddenField
        {
            set { _enableShowHiddenField = value; }
            get { return _enableShowHiddenField; }
        }

        /// <summary>
        /// 匯出資料建構式
        /// </summary>
        public ExportData()
            : this(false)
        {
        }

        /// <summary>
        /// 匯出資料建構式
        /// </summary>
        /// <param name="showHiddenField">是否顯示隱藏欄位</param>
        public ExportData(bool showHiddenField)
        {
            EnableShowHiddenField = showHiddenField;

            _workBook = new HSSFWorkbook();

            _fontColors = new Dictionary<Color, IFont>();

            _cellStyles = new Dictionary<string, ICellStyle>();

            _cellDataFormat = new Dictionary<int, short>();

            _dataFormat = new Dictionary<string, short>();
        }

/// <summary>
        /// 將GridView匯出為MemoryStream
        /// </summary>
        /// <param name="gvData">GridView object</param>
        /// <returns>MemoryStream object</returns>
        public MemoryStream ExportGridViewToMemoryStream(GridView gvData)
        {
            return ExportGridViewToMemoryStream(gvData, "Sheet1", null);
        }

        /// <summary>
        /// 將GridView匯出為MemoryStream
        /// </summary>
        /// <param name="gvData">GridView object</param>
        /// <param name="sheetName">Excel Sheet Name</param>
        /// <param name="picBytes">圖片二進制數據bytes</param>
        /// <returns>MemoryStream object</returns>
        public MemoryStream ExportGridViewToMemoryStream(GridView gvData, string sheetName, object picBytes)
        {
            MemoryStream stream = null;

            try
            {
                if (gvData != null)
                {
                    _gvData = gvData;

                    RemovePager(_gvData);

                    RenderDataToText();

                    stream = new MemoryStream();

                    ISheet sheet = _workBook.CreateSheet(sheetName);

                    // 轉出Header
                    RenderHeaderRow(sheet);

                    // 轉出Data
                    RenderDataRow(sheet);

                    // 轉出Footer
                    RenderFooterRow(sheet);

                    // 設定欄位寬度
                    SetAutoSizeColumn(sheet, gvData);

                    if (picBytes != null)
                    {
                        int pictureIdx = _workBook.AddPicture((byte[])picBytes, PictureType.JPEG);

                        // Create the drawing patriarch.  This is the top level container for all shapes.
                        IDrawing patriarch = sheet.CreateDrawingPatriarch();

                        //add a picture
                        IClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 0, 0, _gvData.Rows.Count + 2, 1, 3);
                        IPicture pict = patriarch.CreatePicture(anchor, pictureIdx);

                        pict.Resize();
                    }

                    _workBook.Write(stream);

                    stream.Flush();

                    stream.Position = 0;
                }
            }
            catch (Exception ex)
            {
                Log.Log.Write(ex);

                throw;
            }

            return stream;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值