c# NPOI 导出EXCEL

需要引入dll文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSR_Web.Common
{
    public   class NPOIExport
    {
        public static NPOI.HSSF.UserModel.HSSFWorkbook DoExport(System.Data.DataTable dt, string notile)
        {

            //创建工作簿
            NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
            //创建表
            NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(notile);
            //自适应列宽
          //  sheet.AutoSizeColumn(1, true);
            //标题行合并单元格
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dt.Columns.Count-1));

            NPOI.SS.UserModel.IRow firstrow = sheet.CreateRow(0);
            NPOI.SS.UserModel.ICell firstcell = firstrow.CreateCell(0);

            //表名样式
            NPOI.SS.UserModel.ICellStyle styleHeader = book.CreateCellStyle();
            NPOI.SS.UserModel.IFont fontHeader = book.CreateFont();
            styleHeader.Alignment =NPOI.SS.UserModel.HorizontalAlignment.Center;
            styleHeader.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
            fontHeader.FontHeightInPoints =20;

            styleHeader.SetFont(fontHeader);
            firstcell.CellStyle = styleHeader;
            firstcell.SetCellValue(notile);

            try
            {
                //列名样式
                NPOI.SS.UserModel.ICellStyle styleColName = book.CreateCellStyle();
                NPOI.SS.UserModel.IFont fontColName = book.CreateFont();
                styleColName.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                styleColName.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                fontColName.FontHeightInPoints = 14;
                styleColName.SetFont(fontColName);

                //数据的样式、字体大小
                NPOI.SS.UserModel.ICellStyle styleBody = book.CreateCellStyle();
                NPOI.SS.UserModel.IFont fontBody = book.CreateFont();

                styleBody.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                styleBody.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                fontBody.FontHeightInPoints = 12;
                styleBody.SetFont(fontBody);

                //创建具体单元格数据
                int rowCount = dt.Rows.Count;
                int colCount = dt.Columns.Count;

                NPOI.SS.UserModel.IRow colNameRow = sheet.CreateRow(1);
                for (int x = 0; x < colCount; x++) { //将列名写入单元格
                    NPOI.SS.UserModel.ICell colNameCell = colNameRow.CreateCell(x);
                    colNameCell.SetCellValue(dt.Columns[x].ColumnName);
                    colNameCell.CellStyle = styleColName;
                }

                    for (int i = 0; i < rowCount; i++)
                    {
                        NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 2);//数据从第三上开始 第一行表名 第二行列名

                        for (int j = 0; j < colCount; j++)
                        {
                            //填充数据
                            NPOI.SS.UserModel.ICell cell = row.CreateCell(j);

                            if (dt.Rows[i][j] != null)
                            {

                                cell.SetCellValue(dt.Rows[i][j].ToString());
                            }
                            else
                            {
                                cell.SetCellValue("");
                            }

                            cell.CellStyle = styleBody;
                        }
                    }
                //自适应列宽
                for (int x = 0; x < colCount; x++)
                {
                    sheet.AutoSizeColumn(x, true);
                }

                //此处代码是将 xls文件发到页面通过浏览器直接下载到本地  可以放到 界面调用的地方
                //System.IO.MemoryStream ms = new System.IO.MemoryStream();
                //book.Write(ms);
                //Response.AddHeader("Content-Disposition", string.Format("attachment; filename=绩效统计.xls"));
                //Response.BinaryWrite(ms.ToArray());
                //book = null;
                //ms.Close();
                //ms.Dispose();  

                return book;
            }
            catch {
            throw new Exception();
            }finally{
                book=null;
            }

        }

    }
}
  /// <summary>
        ///导出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnExport_Click(object sender, EventArgs e)
      {

            DataTable dt = cmbll.getdt();

            NPOI.HSSF.UserModel.HSSFWorkbook book = NPOIExport.DoExport(dt, "xxx报表");
            //写入客户端
            try
            {
                WriteClient(book);
            }
            catch
            {

            }
            finally
            {

                book = null;
            }

        }

        public void WriteClient(NPOI.HSSF.UserModel.HSSFWorkbook book)
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            Response.AddHeader("Content-Disposition", string.Format("attachment; filename=客户资料"+DateTime.Now.ToString("yyyyMMddHHmmss")+".xls"));
            Response.BinaryWrite(ms.ToArray());
            book = null;
            ms.Close();
            ms.Dispose();
        }
时间: 2024-10-07 06:30:19

c# NPOI 导出EXCEL的相关文章

NPOI导出excel(带图片)

近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新工具包. 2.选择.net版本(例如dotnet4),引用其中的dll. 3.后台代码 using System; using System.Web; using System.Data; using System.Configuration; using System.IO; using Test

NPOI导出EXCEL 打印设置分页及打印标题

在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置  sheet1.FitToPage = false; 而这个属性默认是true的,怪不得一直设置都不起作用. 设置打印标题用 hssfworkbook.SetRepeatingRowsAndColumns(0, 0, 5, 0, 5); 但最新版本已经有新的方法了. Sheet sheet1 = hssfworkbook.CreateSheet("She

分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. 一个系统开发出来,系统要运行起来,很多数据要初始化,这个时候也是需要客户提供各种业务的基础数据.客户提供的数据中,其中除了word.pdf,最常见的就是Excel. 废话不多说,直接上图上代码: 如图, 左侧三列,作为 一个系统 所有菜单的树状结构. 其他列 以用户的信息(如用户名.登录名) 作为表

.NET NPOI导出Excel详解

NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, doc, ppt等. 官方网站:http://npoi.codeplex.com/ nuget直接获取使用 一.NPOI生成Excel //创建工作薄 var workbook = new HSSFWorkbook(); //创建表 var table = workbook.CreateSheet(

共享一个MVC4通过NPOI导出excel的通用方法

1 public static System.IO.MemoryStream ExportExcel<T>(string title, List<T> objList, params string[] excelPropertyNames) 2 { 3 NPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); 4 NPOI.SS.UserModel.ISheet sheet = wo

Asp.Net 使用Npoi导出Excel

引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是使用OleDb的方式,这种方式的导入在服务器端似乎还是需要装office组件的,有没有不需要装组件并且能照常导入的呢? Npoi导出/下载Excel public void NpoiExcel(DataTable dt, string title) { NPOI.HSSF.UserModel.HSS

NPOI导出Excel时出现错误“Maximum column number is 255”

此错误并不是NPOI的问题,而是Excel的问题,原因是Excel的最大列255,所以导出的列超过255时就会出现此问题 但Excel2007以上并没有此问题,因为2007以上的列已经增加到16384列啦,但2003和2007的代码是不一样的 NPOI操作2007(NPOI 2.0):http://tonyqus.sinaapp.com/npoi2tutorial 如何解决此问题 1.使用2003将列限制到255之内, 2.使用2007列可以扩大到16384个,但之前是2003的代码所以更改成2

NPOI导出Excel - 自动适应中文宽度(帮助类下载)

前言 做了好几个Excel.Word导出,用了HTTP流导出伪Excel文件.用过Office组件(这东西在生产环境下相当麻烦,各种权限,**). 最后决定使用NPOI组件来导出,好处很多很多了,这里不多说. 这篇文章呢,主要说一下Excel导出的细节以及问题. 我在制作这个Demo的时候使用的环境: Visual Studio 2010.Office 2013 .Framework .NET 3.5 .NPOI 1.2.5(至于为什么没有选最新版 稍后说) 完成后的截图 从浏览器导出的Exce

NPOI导出Excel(含有超过65335的处理情况)

NPOI导出excel的网上有很多,正好自己遇到了学习并且记录一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet :后缀xlsx 单个sheet 最大行数为 1048576 2.在用NPOI.dll时,导出的excel两种形式(xls,xlsx)用到的组件不一样,xls是HSSF,xlsx是XSSF, 由于某种原因我选择的是HSSF组件的: 以linq 匿名类得到数据为数据源导出Excel 类如这样的: var

NPOI 导出 excel 性能测试

NPOI 导出 excel 性能测试 Intro 网上看到很多人说 NPOI 的性能不行,自己写了一个 NPOI 的扩展库,于是想尝试看看 NPOI 的性能究竟怎么样,道听途说始终不如自己动手一试. 测试环境 测试工具: BenchmarkDotNet v0.11.5 EPPlus.Core.Extensions v2.3.2 EPPlus v4.5.3.1 测试代码:(Github 源码) [SimpleJob(launchCount: 1, warmupCount: 1, targetCou