C# NOPI实现导出 类

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

namespace WebApplicationNopi
{
    public class ExcelHelper
    {
        private static MemoryStream WriteToStream(HSSFWorkbook hssfworkbook)
        {
            //Write the stream data of workbook to the root directory
            MemoryStream file = new MemoryStream();
            hssfworkbook.Write(file);
            return file;
        }

        //Export(DataTable table, string headerText, string sheetName, string[] columnName, string[] columnTitle)
        /// <summary>
        /// 向客户端输出文件。
        /// </summary>
        /// <param name="table">数据表。</param>
        /// <param name="headerText">头部文本。</param>
        /// <param name="sheetName"></param>
        /// <param name="columnName">数据列名称。</param>
        /// <param name="columnTitle">表标题。</param>
        /// <param name="fileName">文件名称。</param>
        public static void Write(HttpContext context, DataTable table, string headerText, string sheetName, string[] columnName, string[] columnTitle, string fileName)
        {
            context.Response.Clear();

            context.Response.AddHeader("Content-Disposition",
                        "attachment; filename=" + fileName); //HttpUtility.UrlEncode(fileName));
            context.Response.ContentType = "application/vnd.ms-excel";
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            GenerateData(hssfworkbook, table, headerText, sheetName, columnName, columnTitle);
            context.Response.BinaryWrite(WriteToStream(hssfworkbook).GetBuffer());
            context.Response.End();
        }

        /// <summary>
        /// 向客户端输出文件
        /// </summary>
        /// <param name="context"></param>
        /// <param name="list">数据表列表</param>
        /// <param name="headerText">头部文本</param>
        /// <param name="sheetNameList">数据列名称集合</param>
        /// <param name="columnName">表标题集合</param>
        /// <param name="columnTitle">表标题集合</param>
        /// <param name="fileName">文件名称</param>
        public static void Write(HttpContext context, List<DataTable> list, string headerText, string[] sheetNameList, List<string[]> columnName, List<string[]> columnTitle, string fileName)
        {
            context.Response.Clear();

            context.Response.AddHeader("Content-Disposition",
                        "attachment; filename=" + fileName); //HttpUtility.UrlEncode(fileName));
            context.Response.ContentType = "application/vnd.ms-excel";
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            for (int i = 0; i < sheetNameList.Length; i++)
            {
                GenerateData(hssfworkbook, list[i], headerText, sheetNameList[i], columnName[i], columnTitle[i]);
            }
            context.Response.BinaryWrite(WriteToStream(hssfworkbook).GetBuffer());
            context.Response.End();
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="table"></param>
        /// <param name="headerText"></param>
        /// <param name="sheetName"></param>
        /// <param name="columnName"></param>
        /// <param name="columnTitle"></param>
        /// <returns></returns>
        public static HSSFWorkbook GenerateData(HSSFWorkbook hssfworkbook, DataTable table, string headerText, string sheetName, string[] columnName, string[] columnTitle)
        {
            //HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            ISheet sheet = hssfworkbook.CreateSheet(sheetName);

            #region 设置文件属性信息

            //创建一个文档摘要信息实体。
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "Net"; //公司名称
            hssfworkbook.DocumentSummaryInformation = dsi;

            //创建一个摘要信息实体。
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "本文档由 JINS OA系统生成";
            si.Author = "licao";
            si.Title = headerText;
            si.Subject = headerText;
            si.CreateDateTime = DateTime.Now;
            hssfworkbook.SummaryInformation = si;

            #endregion 设置文件属性信息

            ICellStyle dateStyle = hssfworkbook.CreateCellStyle();

            IDataFormat format = hssfworkbook.CreateDataFormat();

            dateStyle.DataFormat = format.GetFormat("@");

            #region 取得列宽

            int[] colWidth = new int[columnName.Length];
            for (int i = 0; i < columnName.Length; i++)
            {
                colWidth[i] = Encoding.GetEncoding(936).GetBytes(columnTitle[i]).Length;
            }
            for (int i = 0; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < columnName.Length; j++)
                {
                    int intTemp = Encoding.GetEncoding(936).GetBytes(table.Rows[i][columnName[j]].ToString()).Length;
                    if (intTemp > colWidth[j])
                    {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值