GridView匯出Excel(NPOI篇)[3]


        /// <summary>
        /// 轉出GridView的Header
        /// </summary>
        /// <param name="sheet">HSSFSheet object</param>
        private void RenderHeaderRow(ISheet sheet)
        {
            sheet.CreateFreezePane(0, 1);

            ICellStyle style = GetTitleStyle();

            IRow headerRow = sheet.CreateRow(0);

            int cellCount = 0;

            GridViewRow row = _gvData.HeaderRow;

            for (int i = 0, iCount = row.Cells.Count; i < iCount; i++)
            {
                if (EnableShowHiddenField || (_gvData.Columns[i].Visible && row.Cells[i].Visible))
                {
                    ICell cell = headerRow.CreateCell(cellCount);

                    cell.CellStyle = style;
                    
                    cell.SetCellValue(HttpUtility.HtmlDecode(row.Cells[i].Text.Trim()));

                    cellCount++;
                }
            }
        }

        /// <summary>
        /// 轉出GridView的資料
        /// </summary>
        /// <param name="sheet">HSSFSheet object</param>
        private void RenderDataRow(ISheet sheet)
        {
            GridViewRowCollection rows = _gvData.Rows;

            int columnsCount = _gvData.Columns.Count;

            string[] newLine = new string[] { Environment.NewLine };

            for (int rowIdx = 0, iCount = rows.Count; rowIdx < iCount; rowIdx++)
            {  
                IRow row = sheet.CreateRow(rowIdx + 1);

                int iMaxRowHight = 1;

                int cellCount = 0;

                Color rowColor = GetRowColor(rows[rowIdx]);

                for (int colIdx = 0; colIdx < columnsCount; colIdx++)
                {
                    if (EnableShowHiddenField || (_gvData.Columns[colIdx].Visible && rows[rowIdx].Cells[colIdx].Visible))
                    {
                        TableCell dataCell = rows[rowIdx].Cells[colIdx];

                        ICell cell = row.CreateCell(cellCount);

                        Color cellColor = GetTableCellColor(_gvData.Columns[colIdx], dataCell);

                        string cellValue =
                            HttpUtility.HtmlDecode(dataCell.Text.Trim()).Replace("<br />", Environment.NewLine);

                        SetCellStyle(cell, rowColor, cellColor);

                        SetCellValue(colIdx, cell, cellValue);

                        int newLineCount = cellValue.Split(newLine, StringSplitOptions.None).Length;

                        if (newLineCount > iMaxRowHight)
                        {
                            iMaxRowHight = newLineCount;
                        }

                        if (rows[rowIdx].Cells[colIdx].ColumnSpan > 1)
                        {
                            sheet.AddMergedRegion(new CellRangeAddress(rowIdx + 1, rowIdx + 1, (cellCount + 1), (cellCount + rows[rowIdx].Cells[colIdx].ColumnSpan)));
                        }

                        if (rows[rowIdx].Cells[colIdx].RowSpan > 1)
                        {
                            sheet.AddMergedRegion(new CellRangeAddress(rowIdx + 1, (rowIdx + rows[rowIdx].Cells[colIdx].RowSpan), cellCount, cellCount));
                        }
                    }

                    if (EnableShowHiddenField || (_gvData.Columns[colIdx].Visible && rows[rowIdx].Cells[colIdx].Visible))
                    {
                        cellCount++;
                    }
                }

                row.HeightInPoints = (iMaxRowHight + 1) * sheet.DefaultRowHeight / 20;
            }
        }

        /// <summary>
        /// 轉出GridView的Footer
        /// </summary>
        /// <param name="sheet">HSSFSheet object</param>
        private void RenderFooterRow(ISheet sheet)
        {
            if (_gvData.FooterRow.Visible && _gvData.FooterRow != null)
            {
                ICellStyle style = GetFooterStyle(_gvData.FooterRow.BackColor);

                sheet.CreateFreezePane(0, 1);

                IRow footerRow = sheet.CreateRow(_gvData.Rows.Count + 1);

                GridViewRow headerRow = _gvData.HeaderRow;

                GridViewRow row = _gvData.FooterRow;

                int cellCount = 0;

                for (int i = 0, iCount = row.Cells.Count; i < iCount; i++)
                {
                    if (EnableShowHiddenField || headerRow.Cells[i].Visible)
                    {
                        ICell cell = footerRow.CreateCell(cellCount);

                        if (row.Cells[i].ForeColor != Color.Empty)
                        {
                            style.SetFont(GetCellFontColor(row.Cells[i].ForeColor));
                        }

                        cell.CellStyle = style;

                        cell.SetCellValue(HttpUtility.HtmlDecode(row.Cells[i].Text.Trim()));

                        if (row.Cells[i].ColumnSpan > 1)
                        {
                            int rowIdx = _gvData.Rows.Count + 1;

                            sheet.AddMergedRegion(new CellRangeAddress(rowIdx, rowIdx, cellCount, cellCount + row.Cells[i].ColumnSpan - 1));
                        }

                        cellCount++;
                    }
                }
            }
        }

        /// <summary>
        /// 設定Cell的文字為元件的Text屬性
        /// </summary>
        private void RenderDataToText()
        {
            foreach (GridViewRow row in _gvData.Rows)
            {
                foreach (TableCell cell in row.Cells)
                {
                    if (cell.HasControls())
                    {
                        foreach (Control ctl in cell.Controls)
                        {
                            string value = "";

                            if (ctl.GetType().GetProperty("SelectedItem") != null)
                            {
                                value =
                                    ctl.GetType().GetProperty("SelectedItem").GetValue(ctl, null).ToString();
                            }
                            else if (ctl.GetType().GetProperty("Text") != null)
                            {
                                value =
                                    ctl.GetType().GetProperty("Text").GetValue(ctl, null).ToString();
                            }

                            if (value.Trim().Length > 0)
                            {
                                cell.Text = TrimHref(value.Trim());

                                break;
                            }
                        }
                    }
                    else
                    {
                        cell.Text = TrimHref(cell.Text);
                    }
                }
            }
        }

        /// <summary>
        /// 取得資料列Title樣式
        /// </summary>
        /// <returns>資料列Title樣式</returns>
        private ICellStyle GetTitleStyle()
        {
            // 先設定顏色
            HSSFPalette palette = _workBook.GetCustomPalette();

            palette.SetColorAtIndex(HSSFColor.LIGHT_GREEN.index,
                (byte)80, (byte)123, (byte)190);

            ICellStyle style = _workBook.CreateCellStyle();

            style.Alignment = HorizontalAlignment.CENTER;

            style.VerticalAlignment = VerticalAlignment.CENTER;

            style.BorderBottom = NPOI.SS.UserModel.BorderStyle.DOUBLE;

            style.FillPattern = FillPatternType.SOLID_FOREGROUND;

            style.FillForegroundColor = HSSFColor.LIGHT_GREEN.index;

            style.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;

            style.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;

            style.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;

            style.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;

            IFont font = _workBook.CreateFont();

            font.Color = HSSFColor.WHITE.index;

            style.SetFont(font);
            
            return style;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值