NPOI导出Excel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#region NPOI
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using System.Web;
using System.IO;
using System.Data;
using System.Collections;
using System.Web.UI.WebControls;
#endregion
/*========================================================================================
 *
 *
 * 说  明:导入、导出Excel
 * 作  者:李朝强
 * 日  期:2015/03/28
 *
 *
 * =====================================================================================*/
namespace TiKu.Common.Office
{
    public class Excel
    {

        #region ===============================================导出==================================
        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="context">请求上下文</param>
        /// <param name="fileName">导出文件的名</param>
        /// <param name="stream">数据流</param>
        public void Export(HttpContext context,
                           string fileName,
                           MemoryStream stream)
        {
            if (context.Request.Browser.Browser == "IE")
                fileName = HttpUtility.UrlEncode(fileName);
            context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
            context.Response.BinaryWrite(stream.ToArray());
        }

        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="context">上下文</param>
        /// <param name="filename">导出的文件名</param>
        /// <param name="data">数据</param>
        public void Export(HttpContext context,
                           string filename,
                           string sheetName,
                           Hashtable hashColumnInfos,
                           DataTable data)
        {
            MemoryStream ms = null;
            try
            {
                ms = ReadToExcel(data,
                                 sheetName,
                                 hashColumnInfos);
                //执行导出
                Export(context, filename, ms);
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                if (null != ms)
                {
                    ms.Close();
                    ms.Dispose();
                }
            }
        }

        /// <summary>
        /// 从Repeat控件中,导出Excel
        /// </summary>
        /// <param name="RepList">控件</param>
        /// <param name="filename">文件名</param>
        /// <param name="sheetName">工作表</param>
        public void Export(Repeater RepList,
                           string filename,
                           string sheetName,
                           HttpContext context)
        {
            object data = RepList.DataSource;
            if (data is DataTable)
            {
                Export(context,
                       filename,
                       sheetName,
                       null,
                       (DataTable)data);
                return;
            }
            if (data is DataView)
            {
                return;
            }
            if (data is IList)
            {
                return;
            }
        }
        #endregion

        #region ================================================数据流========================================
        /// <summary>
        /// 把DataTable对象,读取到内存流中
        /// </summary>
        /// <param name="data">DataTable对象</param>
        /// <param name="hashColumnInfos">(可选)列</param>
        /// <returns></returns>
        public MemoryStream ReadToExcel(DataTable data,
                                        string sheetName,
                                        Hashtable hashColumnInfos)
        {
            sheetName = string.IsNullOrEmpty(sheetName) ? string.Format("Sheet-{0:yyy/MM/dd}", DateTime.Now) : sheetName;
            //0>内存流
            MemoryStream ms = new MemoryStream();
            //1>创建工作薄
            IWorkbook __workbook = new HSSFWorkbook();
            //2>创建工作表
            ISheet __sheet = __workbook.CreateSheet(sheetName);

            #region 单元格样式
            //单元格样式
            ICellStyle cellStyle = __workbook.CreateCellStyle();
            cellStyle.FillPattern = FillPattern.SolidForeground;
            cellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Green.Index;
            //设置字体
            IFont font = __workbook.CreateFont();
            font.Color = NPOI.HSSF.Util.HSSFColor.White.Index;
            cellStyle.SetFont(font);

            cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Green.Index;
            #endregion

            #region 3>创建表头
            //创建一行
            IRow __header = __sheet.CreateRow(0);
            if (null == hashColumnInfos)
            {
                for (int i = 0; i < data.Columns.Count; i++)
                {
                    //创建单元格
                    ICell __cell = __header.CreateCell(i);
                    __cell.SetCellValue(data.Columns[i].ColumnName);
                    __sheet.SetColumnWidth(i, 20 * 256);
                    __cell.CellStyle = cellStyle;
                }
            }
            else
            {
                int j = 0;
                foreach (DictionaryEntry item in hashColumnInfos)
                {
                    //创建单元格
                    ICell __cell = __header.CreateCell(j);
                    __cell.SetCellValue(item.Value.ToString());
                    __sheet.SetColumnWidth(j, 20 * 256);
                    __cell.CellStyle = cellStyle;
                    ++j;
                }
            }
            #endregion

            #region 4>创建数据行
            int c = 0;
            for (int k = 0; k < data.Rows.Count; k++)
            {
                IRow __dataRow = __sheet.CreateRow(k + 1);
                for (c = 0; c < data.Columns.Count; c++)
                {
                    ICell iCell = __dataRow.CreateCell(c);
                    iCell.SetCellValue(data.Rows[k][data.Columns[c].ColumnName].ToString());
                    c++;
                }
                c = 0;
            }
            #endregion

            //5>最后,写入内存流
            __workbook.Write(ms);
            return ms;

        }

        /// <summary>
        /// 把IDataReader对象,读取到内存流中
        /// </summary>
        /// <param name="dataReader">IDataReader对象</param>
        /// <param name="sheetName">工作表名称</param>
        /// <param name="hashColumnInfos">列</param>
        /// <returns></returns>
        public MemoryStream ReadToExcel(IDataReader dataReader,
                                        string sheetName,
                                        Hashtable hashColumnInfos)
        {
            //0>内存流
            MemoryStream ms = new MemoryStream();
            //1>创建工作薄
            IWorkbook __workbook = new HSSFWorkbook();

            //2>创建工作表
            ISheet __sheet = __workbook.CreateSheet(sheetName);

            #region 3>表头
            IRow __header = __sheet.CreateRow(0);
            if (null == hashColumnInfos)
            {
                for (int i = 0; i < dataReader.FieldCount; i++)
                {
                    ICell iHeaderCell = __header.CreateCell(i);
                    iHeaderCell.SetCellValue(dataReader.GetName(i));
                }
            }
            else
            {
                int j = 0;
                foreach (DictionaryEntry item in hashColumnInfos)
                {
                    //创建单元格
                    ICell __cell = __header.CreateCell(j);
                    __cell.SetCellValue(item.Value.ToString());
                    ++j;
                }
            }
            #endregion

            #region 4>数据行
            int n = 1;
            while (dataReader.Read())
            {
                IRow __dataRow = __sheet.CreateRow(n);
                for (int c = 0; c < dataReader.FieldCount; c++)
                {
                    ICell iCell = __dataRow.CreateCell(c);
                    iCell.SetCellValue((dataReader.GetValue(c) ?? "").ToString());
                }
            }
            #endregion

            //5>写入内存流
            __workbook.Write(ms);

            return ms;
        }
        #endregion

    }
}

时间: 2024-09-20 05:40:16

NPOI导出Excel的相关文章

使用NPOI导出EXCEL,设置单元格为货币格式时无效.

问题描述 使用NPOI导出EXCEL,设置单元格为货币格式时无效. 在使用NPOI导出EXCEL时,设置了单元格格式为货币格式,但是导出来的数据格式还是为通用格式, 求解!!! 格式代码: ICell cell = contentRow.CreateCell(2); //cell.SetCellValue((double)result.PeriodPayoffInterest.Value); cell.SetCellValue(20000); //set date format 设置单元格格式

NPOI导出Excel,函数失效

问题描述 我使用NPOI进行excel的导出,代码流程是这样的项目下面有一个excel文件的模板,我在这个模板里面设置了sum的函数,然后通过程序为其它的单元格赋值,接着导出这个Excel文件,谁知里面的函数不起作用.当我打开这个Excel的时候,修改里面任何一列数值,这个函数就激活.如上情况,怎么使得行数在程序里面赋值之后就起效果呢 解决方案 本帖最后由 loushuibazi 于 2015-11-01 17:58:13 编辑

NPOI导出EXCEL 5万多条 数据量太大,内存爆炸,如何解决?

问题描述 导一个月的就报错502BadGateway错误了,如果导半个月数据少点就没问题:大神们有没有什么解决方案. 解决方案 解决方案二:不用NPOI用其它插件的导出,这个方案没法接收,因为要改太费时间了.解决方案三:在线等大神啊!解决方案四:我有一段代码,没试过大量数据的时候行不行,你试试DimmsAsNewSystem.IO.MemoryStreambook.Write(ms)Response.AddHeader("Content-Disposition",String.Form

asp.net使用npoi读取excel模板并导出下载详解

 这篇文章主要介绍了asp.net使用npoi读取excel模板并导出下载的示例,大家参考使用吧 为什么要使用NPOI导出Excel?   一.解决传统操作Excel遇到的问题:   如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机. Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123. 导出时,如果字段内容以"-"

asp.net使用npoi读取excel模板并导出下载详解_实用技巧

为什么要使用NPOI导出Excel? 一.解决传统操作Excel遇到的问题: 如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机.Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123.导出时,如果字段内容以"-"或"="开头,Excel会把它当成公式进行,会报错.Excel会根据Excel文件前8行分

Asp.Net使用Npoi导入导出Excel的方法_实用技巧

asp.net针对Excel文件的导入与导出是非常常见的功能之一.本文实例讲述了Asp.Net使用Npoi导入导出Excel的方法.分享给大家供大家参考之用.具体方法如下: 在使用Npoi导出Excel的时候,服务器可以不装任何office组件,一般在导出时用到Npoi导出Excel文件,所导Excel也符合规范,打开时也不会有任何文件损坏之类的提示.但是在做导入时还是使用OleDb的方式,这种方式的导入在服务器端似乎还是需要装office组件的. 一.Npoi导出/下载Excel 具体功能代码

求帮助-NPOI导出表格发布之后报错问题

问题描述 NPOI导出表格发布之后报错问题 我使用的NPOI导出EXCEL表格,在我自己的电脑上发布之后没错误,在客户那边发布之后就报了一个Server Error in '/' Application. Runtime Error Description: An application error occurred on the server. The current custom error settings for this application prevent the details

.net WEB 利用NPOI导出数据到EXCEL

问题描述 要求,不是简单的只导出数据到EXCEL而是数据里面有一列是图片,要同时将图片一起导出到EXCEL中,比如产品名称,图片,型号,单价,金额图片列在数据库里面要用什么类型?如何导出到EXCEL呢?求助,急 解决方案 解决方案二:爲什麽不使用web專用控件,你要求的那個是com類型,不是純.NET開發的解决方案三:.COM的话,有时候很麻烦,时不时的出什么问题.NPOI是一个类库,可以生成EXCEL,方便啊.求实例.大侠们解决方案四:C#导出Excel--插入图片代码:Sheetsheet1

ASP.NET使用NPOI类库导出Excel

/* * 作者: 牛腩 * 创建时间: 2010-1-4 15:15:05 * Email: 164423073@qq.com * 说明: 导出EXCEL的类,使用说明见:http://msdn.microsoft.com/zh-tw/ee818993.aspx */ using System;using System.Collections.Generic;using System.Data;using System.IO;using System.Linq;using System.Web;