`
niunan
  • 浏览: 725966 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

ASP.NET使用NPOI类库导出Excel

    博客分类:
  • .NET
阅读更多

/*
 * 作者: 牛腩
 * 创建时间: 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;
using NPOI;
using NPOI.HPSF;
using NPOI.HSSF;
using NPOI.HSSF.UserModel;
using NPOI.POIFS;
using NPOI.Util;

public class DataTableRenderToExcel
{
    public static Stream RenderDataTableToExcel(DataTable SourceTable)
    {
        HSSFWorkbook workbook = new HSSFWorkbook();
        MemoryStream ms = new MemoryStream();
        HSSFSheet sheet = workbook.CreateSheet();
        HSSFRow headerRow = sheet.CreateRow(0);

        // handling header.
        foreach (DataColumn column in SourceTable.Columns)
            headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);

        // handling value.
        int rowIndex = 1;

        foreach (DataRow row in SourceTable.Rows)
        {
            HSSFRow dataRow = sheet.CreateRow(rowIndex);

            foreach (DataColumn column in SourceTable.Columns)
            {
                dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
            }

            rowIndex++;
        }

        workbook.Write(ms);
        ms.Flush();
        ms.Position = 0;

        sheet = null;
        headerRow = null;
        workbook = null;

        return ms;
    }

    public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
    {
        MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
        FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
        byte[] data = ms.ToArray();

        fs.Write(data, 0, data.Length);
        fs.Flush();
        fs.Close();

        data = null;
        ms = null;
        fs = null;
    }

    public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex)
    {
        HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
        HSSFSheet sheet = workbook.GetSheet(SheetName);

        DataTable table = new DataTable();

        HSSFRow headerRow = sheet.GetRow(HeaderRowIndex);
        int cellCount = headerRow.LastCellNum;

        for (int i = headerRow.FirstCellNum; i < cellCount; i++)
        {
            DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
            table.Columns.Add(column);
        }

        int rowCount = sheet.LastRowNum;

        for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
        {
            HSSFRow row = sheet.GetRow(i);
            DataRow dataRow = table.NewRow();

            for (int j = row.FirstCellNum; j < cellCount; j++)
                dataRow[j] = row.GetCell(j).ToString();
        }

        ExcelFileStream.Close();
        workbook = null;
        sheet = null;
        return table;
    }

    public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)
    {
        HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
        HSSFSheet sheet = workbook.GetSheetAt(SheetIndex);

        DataTable table = new DataTable();

        HSSFRow headerRow = sheet.GetRow(HeaderRowIndex);
        int cellCount = headerRow.LastCellNum;

        for (int i = headerRow.FirstCellNum; i < cellCount; i++)
        {
            DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
            table.Columns.Add(column);
        }

        int rowCount = sheet.LastRowNum;

        for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
        {
            HSSFRow row = sheet.GetRow(i);
            DataRow dataRow = table.NewRow();

            for (int j = row.FirstCellNum; j < cellCount; j++)
            {
                if (row.GetCell(j) != null)
                    dataRow[j] = row.GetCell(j).ToString();
            }

            table.Rows.Add(dataRow);
        }

        ExcelFileStream.Close();
        workbook = null;
        sheet = null;
        return table;
    }

    /// <summary>读取excel
    /// 默认第一行为标头
    /// </summary>
    /// <param name="path">excel文档路径</param>
    /// <returns></returns>
    public static DataTable RenderDataTableFromExcel(string path) {
        DataTable dt = new DataTable();

        HSSFWorkbook hssfworkbook;
        using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
        {
            hssfworkbook = new HSSFWorkbook(file);
        }
        HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
        System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

        HSSFRow headerRow = sheet.GetRow(0);
        int cellCount = headerRow.LastCellNum;

        for (int j = 0; j < cellCount; j++)
        {
            HSSFCell cell = headerRow.GetCell(j);
            dt.Columns.Add(cell.ToString());
        }

        for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
        {
            HSSFRow row = sheet.GetRow(i);
            DataRow dataRow = dt.NewRow();

            for (int j = row.FirstCellNum; j < cellCount; j++)
            {
                if (row.GetCell(j) != null)
                    dataRow[j] = row.GetCell(j).ToString();
            }

            dt.Rows.Add(dataRow);
        }

        //while (rows.MoveNext())
        //{
        //    HSSFRow row = (HSSFRow)rows.Current;
        //    DataRow dr = dt.NewRow();

        //    for (int i = 0; i < row.LastCellNum; i++)
        //    {
        //        HSSFCell cell = row.GetCell(i);


        //        if (cell == null)
        //        {
        //            dr[i] = null;
        //        }
        //        else
        //        {
        //            dr[i] = cell.ToString();
        //        }
        //    }
        //    dt.Rows.Add(dr);
        //}

        return dt;
    }
}
 
分享到:
评论

相关推荐

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

    在***中使用NPOI读取Excel模板并导出下载的详细过程涉及到多个知识点,包括对NPOI库的理解、Excel文件的读写操作、以及*** Web应用程序中的文件处理。下面将详细介绍这些内容。 ### 1. NPOI库简介 NPOI是一个开源的...

    asp.net导出Excel类库代码分享

    代码如下:using System;using System.Collections.Generic;.../// &lt;summary&gt;///ExcelClass 的摘要说明/// &lt;/summary&gt;public class ExcelClass{ ///  /// 构建ExcelClass类 ///  public ExcelClass() { 

    asp.net 利用NPOI导出Excel通用类的方法

    ASP.NET 使用NPOI库导出Excel是一种常见的需求,它允许开发者创建和操作Excel文件,无需在服务器上安装Microsoft Office。NPOI是.NET平台上一个开源的读写Microsoft Office文件格式的库,包括Excel(HSSF和XSSF)和...

    基于NPOI+ExcelReport实现的导入与导出EXCEL类库 Asp.net源码

    本项目“基于NPOI+ExcelReport实现的导入与导出EXCEL类库Asp.net源码”提供了一个高效且易于使用的解决方案,特别适用于ASP.NET应用程序。下面将详细介绍NPOI和ExcelReport这两个库以及它们如何协同工作。 **NPOI**...

    C#代码NPOI实现的Excel导入导出.rar

    本主题将深入探讨如何使用开源库NPOI在C#中实现Excel的导入和导出功能。NPOI是一个强大的API,允许开发者在不依赖Microsoft Office的情况下读写Excel文件,从而在Web应用或桌面应用中进行数据处理。 NPOI库最初是为...

    c#.net excel的导入导出

    标题 "c#.net excel的导入导出" 描述的是使用C#编程语言和.NET框架来处理Excel文件,实现数据在Excel和数据库之间的导入导出功能。这个项目可能包含了一个完整的解决方案,供开发者参考和学习。 在.NET环境中,C#...

    ASP.NET(c#) EXCEL操作类

    在ASP.NET(C#)项目中,这类库通常用于读取、写入、修改或创建Excel工作簿,以实现数据导入导出等功能。以下是这个主题的一些关键知识点: 1. **C#与ASP.NET基础**: - C#是.NET Framework的主要编程语言,它提供...

    Oracle 导出excel npoi

    本教程将指导新手如何使用C#和.NET框架,结合Npoi库从Oracle数据库中读取数据并将其导出到Excel文件。首先,你需要确保已经在项目中引用了Npoi库。你可以通过NuGet包管理器来安装Npoi,输入命令`Install-Package ...

    ASP.net 对EXCEL操作的类

    ASP.NET 是一个强大的Web应用程序开发框架,由微软公司推出,用于构建动态网站、Web应用程序和服务。...通过学习和使用这些工具,开发者可以在ASP.NET应用程序中轻松地实现Excel数据的导入导出和各种复杂操作。

    导出Excel.rar

    在.NET框架下,C#程序员通常使用不同的库来实现Excel文件的创建和导出。在标题和标签中提到的“C# 导出到Excel工具类”,指的是自定义的类库,用于处理数据到Excel的转换。这类工具类通常包含了各种方法,如`...

    多个导出excel的源代码

    8. **ASP.NET数据报表**:"ASP.NET中使用Excel数据报表【自动创建DataTable】.zip"可能是关于如何在ASP.NET中创建动态数据报表的教程,利用DataTable和Excel功能生成动态的Excel文件。 9. **myxls**:"myxls-0.5.2-...

    C#、ASP.NET的Excel帮助类.zip

    在.NET开发环境中,C#和ASP.NET经常被用于构建企业级Web应用程序,其中包括处理各种数据导入导出的需求。Excel作为广泛使用的电子表格软件,它的数据处理能力强大且易读易写,因此在业务系统中与Excel进行交互是常见...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    技术点 ADO.Net技术应用、SQLServer、MD5安全算法、基于NPOI的Excel文件处理、树状结构数据处理、递归、CodeSmith、代码生成器、三层架构。 项目说明 这是一个用WinForm技术实现的系统,传智播客在开课的半个月就...

    标准excel导入导出

    综合以上信息,这个压缩包提供的是一种使用C#和NPOI库实现的Excel导入导出功能,适用于那些需要在自己的ASP.NET项目中处理Excel数据的开发者。通过学习和使用这个模块,开发者可以了解如何读取和写入Excel文件,以及...

    [茗洋]MyNPOI_V1.2

    MyNPOI是 AaronYang(茗洋)基于开源Excel导出的组件NPOI二次封装,使得.net方向 Excel操作更加简单的一个类库。它不是重写NOPI,对NOPI的源码进行改写,这里保留NPOI的版权声明。最低框架使用.net framework4.0 ...

    ExcelHelper

    ExcelHelper 是一个在ASP.NET开发环境中用于方便地将数据从GridView控件导出到Excel的工作助手类库。这个工具能够帮助开发者快速实现网页表格数据的Excel格式化输出,让用户可以轻松下载并处理大量数据。 在ASP.NET...

    ExcelExportTool.zip

    《使用NPOI进行Excel导出的C#代码实践...在实际应用中,我们还可以结合其他技术,如Entity Framework进行数据库操作,或者使用ASP.NET MVC、ASP.NET Core等Web技术来构建服务器端导出服务,实现更复杂的数据导出场景。

    网页显示excel控件代码

    NPOI是一个强大的.NET库,允许开发者在不依赖Microsoft Office的情况下读写Excel文件。下面将详细阐述这个知识点。 首先,C#是一种面向对象的编程语言,广泛应用于Windows平台的开发,包括ASP.NET Web应用程序。在...

    CSharp-Excel-master.zip

    本项目"**CSharp-Excel-master.zip**"显然关注的是C#与Excel的交互,利用NPOI库实现Excel数据的导入和导出功能。NPOI是一个强大的开源库,它允许开发者在.NET平台上读写Microsoft Office格式的文件,包括Excel。 **...

Global site tag (gtag.js) - Google Analytics