NPOI 1.2.4实现服务器无OFFICE组件导出EXCEL

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.SS.Util;
using NPOI.SS.UserModel;
using System.Data;
namespace WebApplication1
{
    /// <summary>
    /// Summary description for DownloadExcel
    /// </summary>
    public class DownloadExcel : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/x-excel";
            string sFileType = context.Request.QueryString["FileType"];

            switch (sFileType)
            {
                case "1": //Product Development Time Report
                    SaveProductDeveTime(context);
                    break;
                case "2": //Project Billable Report

                    break;
                case "3": //Project Development Time Report

                    break;
                case "4": //Staff Claim Control Report

                    break;
            }

            context.Response.Write("Hello World");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }


        private void SaveProductDeveTime(HttpContext context)
        {

            int rowIndex = 0;
            string filename = HttpUtility.UrlEncode("Product_Development_Time_Report.xls");//文件名进行url编码,防止乱码
            context.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
            HSSFWorkbook workbook = new HSSFWorkbook();
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "NPOI Team";
            workbook.DocumentSummaryInformation = dsi;
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "NPOI SDK Example";
            workbook.SummaryInformation = si;
            ISheet sheet = workbook.CreateSheet("Product DevelopmentTime Report");

            //设置报表的主标题信息
            IRow rowTitle = sheet.CreateRow(rowIndex);
            rowTitle.HeightInPoints = 20;

            ICell cellTitle = rowTitle.CreateCell(0);
            //set the title of the sheet
            cellTitle.SetCellValue("Product Development Time Report");
            ICellStyle styleTitle = workbook.CreateCellStyle();
            styleTitle.Alignment = HorizontalAlignment.CENTER;
            //create a font style
            IFont font = workbook.CreateFont();
            font.Boldweight = (short)FontBoldWeight.BOLD;//加粗
            font.FontHeightInPoints = 14;
            styleTitle.SetFont(font);
            cellTitle.CellStyle = styleTitle;
            rowIndex++;


            //merged cells on single row
            //ATTENTION: don't use Region class, which is obsolete
            sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 2));


            //设置报表副标题
            IRow rowSubTitle = sheet.CreateRow(rowIndex);
            rowSubTitle.HeightInPoints = 18;
            ICell cellSubTitle = rowSubTitle.CreateCell(0);
            //set the title of the sheet
            cellSubTitle.SetCellValue("Period:25/02/2012-26/03/2012"); //区间页面传值
            ICellStyle styleSubTitle = workbook.CreateCellStyle();
            styleSubTitle.Alignment = HorizontalAlignment.CENTER;
            //create a font style
            IFont fontSubTitle = workbook.CreateFont();
            fontSubTitle.Boldweight = (short)FontBoldWeight.BOLD;//加粗
            fontSubTitle.FontHeightInPoints = 12;
            styleSubTitle.SetFont(fontSubTitle);
            cellSubTitle.CellStyle = styleSubTitle;
            sheet.AddMergedRegion(new CellRangeAddress(1, 1, 0, 2));
            rowIndex++;

            IRow rowSubTitle2 = sheet.CreateRow(rowIndex);
            rowSubTitle2.HeightInPoints = 18;
            ICell cellSubTitle2 = rowSubTitle2.CreateCell(0);
            //set the title of the sheet
            cellSubTitle2.SetCellValue("Time360");                     //区间页面传值
            ICellStyle styleSubTitle2 = workbook.CreateCellStyle();
            styleSubTitle2.Alignment = HorizontalAlignment.CENTER;
            //create a font style
            IFont fontSubTitle1 = workbook.CreateFont();
            fontSubTitle1.Boldweight = (short)FontBoldWeight.BOLD;//加粗
            fontSubTitle1.FontHeightInPoints = 12;
            styleSubTitle2.SetFont(fontSubTitle1);
            cellSubTitle2.CellStyle = styleSubTitle2;
            sheet.AddMergedRegion(new CellRangeAddress(2, 2, 0, 2));
            rowIndex++;


            ICellStyle StyleCell = workbook.CreateCellStyle();//创建单元格的样式
            IFont FontCell = workbook.CreateFont();//创建字体样式
            FontCell.Boldweight = (short)FontBoldWeight.BOLD;//加粗
            FontCell.FontHeightInPoints = 12;
            FontCell.FontName = "Arial";

            StyleCell.SetFont(FontCell);
            StyleCell.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;//横样式
            StyleCell.VerticalAlignment = VerticalAlignment.CENTER;//垂直样式
            StyleCell.BorderBottom = CellBorderType.THIN;
            StyleCell.BorderTop = CellBorderType.THIN;

            IRow rowHeaderTitle = sheet.CreateRow(rowIndex);
            string[] HeadcolumnsStr = new string[] { "Activeity Code ", "This Peroid(Manhours)", "To-Date(Manhours)" };
            for (int i = 0; i < HeadcolumnsStr.Length; i++)
            {
                ICell celltemp = rowHeaderTitle.CreateCell(i);

                celltemp.SetCellValue(HeadcolumnsStr[i]);

                celltemp.CellStyle = StyleCell;

            }
            rowIndex++;

            #region 数据
            StyleCell = workbook.CreateCellStyle();//创建单元格的样式
            FontCell = workbook.CreateFont();//创建字体样式
            FontCell.Boldweight = (short)FontBoldWeight.NORMAL;//普通
            FontCell.FontHeightInPoints = 12;

            FontCell.FontName = "Arial";

            StyleCell.SetFont(FontCell);
            StyleCell.Alignment = NPOI.SS.UserModel.HorizontalAlignment.LEFT;//横样式
            StyleCell.VerticalAlignment = VerticalAlignment.CENTER;//垂直样式
            StyleCell.BorderBottom = CellBorderType.THIN;
            StyleCell.BorderTop = CellBorderType.THIN;
            DataTable sourceTable_TestRecord = new DataTable();


            for (int i = 0; i < sourceTable_TestRecord.Rows.Count; i++)
            {
                IRow rowData = sheet.CreateRow(rowIndex);
                for (int j = 0; j < HeadcolumnsStr.Length; j++)
                {
                    ICell cellValue = rowData.CreateCell(j);


                    cellValue.SetCellValue(sourceTable_TestRecord.Rows[i][j].ToString());
                    cellValue.CellStyle = StyleCell;
                }
                rowIndex++;
            }

            #endregion

            #region 统计

            StyleCell = workbook.CreateCellStyle();//创建单元格的样式
            FontCell = workbook.CreateFont();//创建字体样式
            FontCell.Boldweight = (short)FontBoldWeight.BOLD;//加粗
            FontCell.Color = NPOI.HSSF.Util.HSSFColor.RED.index;
            FontCell.FontHeightInPoints = 12;
            FontCell.FontName = "Arial";

            StyleCell.SetFont(FontCell);
            StyleCell.Alignment = NPOI.SS.UserModel.HorizontalAlignment.RIGHT;//横样式
            StyleCell.VerticalAlignment = VerticalAlignment.CENTER;//垂直样式

            IRow rowTotal = sheet.CreateRow(rowIndex);
            ICell cellTotalName0 = rowTotal.CreateCell(0);
            cellTotalName0.SetCellValue("Total Hours");
            cellTotalName0.CellStyle = StyleCell;


            StyleCell = workbook.CreateCellStyle();//创建单元格的样式
            FontCell = workbook.CreateFont();//创建字体样式
            FontCell.Boldweight = (short)FontBoldWeight.BOLD;//加粗
            FontCell.Color = NPOI.HSSF.Util.HSSFColor.RED.COLOR_NORMAL;
            FontCell.FontHeightInPoints = 12;
            FontCell.FontName = "Arial";

            StyleCell.SetFont(FontCell);
            StyleCell.Alignment = NPOI.SS.UserModel.HorizontalAlignment.RIGHT;//横样式
            StyleCell.VerticalAlignment = VerticalAlignment.CENTER;//垂直样式

            ICell cellTotalName1 = rowTotal.CreateCell(1);
            cellTotalName1.SetCellValue("200");
            cellTotalName1.CellStyle = StyleCell;

            #endregion


            #region 设置列宽
            sheet.SetColumnWidth(0, 12000);
            sheet.SetColumnWidth(1, 12000);
            sheet.SetColumnWidth(2, 12000);
            #endregion



            //////merged cells on mutiple rows
            //CellRangeAddress region = new CellRangeAddress(3, 4, 3, 4);

            //sheet.AddMergedRegion(region);


            ////set enclosed border for the merged region
            //((HSSFSheet)sheet).SetEnclosedBorderOfRegion(region, CellBorderType.DOTTED, NPOI.HSSF.Util.HSSFColor.RED.index);


            workbook.Write(context.Response.OutputStream);

        }

    }
}

点击查看原图

知识共享许可协议
《NPOI 1.2.4实现服务器无OFFICE组件导出EXCEL》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     171.80ms