精华内容
下载资源
问答
  • NPOI

    2019-09-29 12:45:57
    NPOI,顾名思义,就是POI 的.NET 版本。POI 是一套用Java 写成的库,能够帮助开发者在没有安装微软Office 的情况下读写Office 文件。NPOI是一套开源的项目,常用的命名空间,包含以下内容: NPOI.Util: 基础辅助库...

    概述

    NPOI,顾名思义,就是POI 的.NET 版本。POI 是一套用Java 写成的库,能够帮助开发者在没有安装微软Office 的情况下读写Office 文件。NPOI是一套开源的项目,常用的命名空间,包含以下内容:

    • NPOI.Util: 基础辅助库
    • NPOI.POIFS: OLE2 格式读写库
    • NPOI.DDF: Microsoft Drawing格式读写库
    • NPOI.SS: Excel 公式计算库
    • NPOI.HPSF: OLE2 的Summary Information 和Document Summary Information 属性读写库
    • NPOI.HSSF : Excel BIFF 格式读写库

    note:
    如果生成的Excel文件后缀是xlsx的话,就不能使用HSSFWorkbook与HSSFSheet类,而必须使用XSSFWorkbook与XSSFSheet类。

    Excel文件操作

    NPOI.HSSF 是专门负责Excel BIFF 格式的命名空间,供开发者使用的对象主要位于NPOI.HSSF.UserModelNPOI.HSSF.Util 命名空间下。NPOI.HSSF.UserModel.HSSFWorkbook 类,这个类负责创建Excel文档。Excel 规定一个Workbook 必须至少带1 个Sheet。

    // 引用动态库并使用命名空间
    using NPOI.HSSF.UserModel;
    
    // 实例化HSSFWorkbook对象
    HSSFWorkbook hssfWb = new HSSFWorkbook();
    // 创建Sheet
    hssfWb.CreateSheet("sheet1");
    // 或者采用下面的方法,注意此处需要使用类型强制转换。
    HSSFSheet sheet1 = (HSSFSheet)hssfWb.CreateSheet("sheet1");
    // 新建文件流
    FileStream file = new FileStream("d:\\test.xls", FileMode.Create);
    // 将HSSFWorkbook实例化的对象写入文件流
    hssfWb.Write(file);
    // 关闭文件流
    file.Close();
    

    基于模板生成Excel文件

    NPOI 一大特色之一就是能够轻松读取Office Excel 的格式,即使里面有NPOI 不支持的VBA 宏、图表以及Pivot 表之类的高级记录,NPOI 也能够保证不丢失数据。

    // 读取模板文件
    HSSFWorkbook wb = new HSSFWorkbook(new FileStream("d:\\template.xls",FileMode.Open,FileAccess.Read));
    // 读取模板文件的表
    HSSFSheet sheet = (HSSFSheet)wb.GetSheet("yy");
    // ForceFormulaRecalculation 是强制要求Excel 在打开时重新计算的属性,在拥有公式的xls文件中十分有用。
    sheet.ForceFormulaRecalculation = true;
    // 新建XLS文件
    FileStream file = new FileStream("d:\\test.xls", FileMode.Create);
    // 将更改后的内容写入到新建的文件中
    wb.Write(file);
    file.Close();
    

    说明:有数据透视表,以及图表的Excel同样适用。

    单元格操作

    单元格是Excel 最有意义的东西,做任何操作恐怕都要和单元格打交道。在Excel 中要添加一个单元格只需要点击任何一个单元格,然后输入内容就是了,但是Excel 底层其实没有这么简单,不同的单元格是有不同的类型的。

    比如说数值单元格是用NumberRecord 表示,文本单元格是用LabelSSTRecord 表示,空单元格是用BlankRecord 表示。这也就意味着,在设置单元格时,必须告诉NPOI 你需要创建哪种类型的单元格。要创建单元格首先要创建单元格所在的行,行建好了就可以建列,通过行和列确定唯一的单元格。

    注意:这里的行在Excel 里是从1 开始的,但是NPOI 内部是从0 开始的;列在Excel里面是用字母表示的,而NPOI 中也是用从0 开始的数字表示的,所以要注意转换。

    // 创建sheet实例
    HSSFSheet sheet1 = (HSSFSheet)hssfWb.CreateSheet("sheet1");
    // 新建单元格并赋值
    sheet1.CreateRow(0).CreateCell(0).SetCellValue("yaoyuan");
    // 获取已经创建好的单元格
    sheet1.GetRow(row_index).GetCell(column_index);
    

    单元格格式

    在Excel 中我们经常要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等。使用NPOI 时要注意,所有的格式都是通过CellStyle.DataFormat 赋给单元格的,而不是直接赋给单元格。

    // 实例化 HSSFCellStyle对象
    HSSFCellStyle cellStyle = (HSSFCellStyle)hssfWb.CreateCellStyle(); //利用HSSFWorkbook类的CreateCellStyle方法。
    // 实例化 HSSFDataFormat对象
    // 由于这里的“yyyy 年m 月d 日”属于自定义格式(区别于Excel 内嵌的格式),所以必须用hssfworkbook.CreateDataFormat()创建一个HSSFDataFormat 实例,然后使用format.GetFormat 来获取相应的格式
    HSSFDataFormat dataFormat = (HSSFDataFormat)hssfWb.CreateDataFormat();
    
    // 修改HSSFCellStyle对象实例的DataFormat属性
    cellStyle.DataFormat = dataFormat.GetFormat("yyyy年m月d日");
    // 如果是excel内置的格式,可直接定义
    cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
    //  修改单元格的CellStyle属性。
    cell.CellStyle = cellStyle;
    
    展开全文
  • NPoi

    2019-09-20 17:55:47
    创建Workbook说白了就是创建一个Excel文件,当然在NPOI中更准确的表示是在内存中创建一个Workbook对象流。 本节作为第2章的开篇章节,将做较为详细的讲解,以帮助NPOI的学习者更好的理解NPOI的组成和使用。 NPOI....

    创建Workbook说白了就是创建一个Excel文件,当然在NPOI中更准确的表示是在内存中创建一个Workbook对象流。

    本节作为第2章的开篇章节,将做较为详细的讲解,以帮助NPOI的学习者更好的理解NPOI的组成和使用。

    NPOI.HSSF是专门负责Excel BIFF格式的命名空间,供开发者使用的对象主要位于NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空间下,下面我们要讲到的Workbook的创建用的就是NPOI.HSSF.UserModel.HSSFWorkbook类,这个类负责创建.xls文档。

    在开始创建Workbook之前,我们先要在项目中引用一些必要的NPOI assembly,如下所示:

    NPOI.dll

    NPOI.POIFS.dll

    NPOI.HSSF.dll

    NPOI.Util.dll

     

    要创建一个新的xls文件其实很简单,只要我们初始化一个新的HSSFWorkbook实例就行了,如下所示:

    using NPOI.HSSF.UserModel;
    ...
    HSSFWorkbook hssfworkbook = new HSSFWorkbook();

    是不是很方便啊,没有任何参数或设置,但这么创建有一些限制,这样创建出来的Workbook在Excel中打开是会报错的,因为Excel规定一个Workbook必须至少带1个Sheet,这也是为什么在Excel界面中,新建一个Workbook默认都会新建3个Sheet。所以必须加入下面的创建Sheet的代码才能保证生成的文件正常:

    HSSFSheet sheet = hssfworkbook.CreateSheet("new sheet");

    如果要创建标准的Excel文件,即拥有3个Sheet,可以用下面的代码:

    hssfworkbook.CreateSheet("Sheet1");
    hssfworkbook.CreateSheet("Sheet2");
    hssfworkbook.CreateSheet("Sheet3");

    最后就是把这个HSSFWorkbook实例写入文件了,代码也很简单,如下所示:

    FileStream file = new FileStream(@"test.xls", FileMode.Create);
    hssfworkbook.Write(file);
    file.Close();

     

    这里假设文件名是test.xls,,在创建完FileStream之后,直接调用HSSFWorkbook类的Write方法就可以了。

    最后你可以打开test.xls文件确认一下,是不是有3个空的Sheet。

    转载于:https://www.cnblogs.com/MyFlora/archive/2012/04/13/2445860.html

    展开全文
  • npoi

    2015-10-11 20:27:00
  • NpoI

    2014-04-03 11:48:00
    NPoI用于Excel表的导出,导入, 使用NPoI需要引入dll文件,Npoi.dll和lonic.zip.dll.对于开发者主要使用Npoi.Hssf.userModel空间下的,HSSfWorkbook,HSSfSheet,HSSfRow,HSSfCell,对应的借口在Npoi.ss.UserModel...

    NPoI用于Excel表的导出,导入,

    使用NPoI需要引入dll文件,Npoi.dll和lonic.zip.dll.对于开发者主要使用Npoi.Hssf.userModel空间下的,HSSfWorkbook,HSSfSheet,HSSfRow,HSSfCell,对应的借口在Npoi.ss.UserModel空间下的, iworkbook,iSheet,IRow,ICell,分别对应Excel文件,工作薄,行,列。

     

    简单演示一下创建一个Workbook对象,添加一个工作表,在工作表中添加一行一列:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    using NPOI.HSSF.UserModel;
    using NPOI.SS.UserModel;
      
    public class NPOIWrite
    {
        void CreateSheet()
        {
            IWorkbook workbook = new HSSFWorkbook();//创建Workbook对象
            ISheet sheet = workbook.CreateSheet("Sheet1");//创建工作表
            IRow row = sheet.CreateRow(0);//在工作表中添加一行
            ICell cell = row.CreateCell(0);//在行中添加一列
            cell.SetCellValue("test");//设置列的内容
        }
    }

    相应的读取代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    using System.IO;
    using NPOI.HSSF.UserModel;
    using NPOI.SS.UserModel;
      
    public class NPOIRead
    {
        void GetSheet(Stream stream)
        {
            IWorkbook workbook = new HSSFWorkbook(stream);//从流内容创建Workbook对象
            ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作表
            IRow row = sheet.GetRow(0);//获取工作表第一行
            ICell cell = row.GetCell(0);//获取行的第一列
            string value = cell.ToString();//获取列的值
        }
    }

    使用NPOI导出

    从DataTable读取内容来创建Workbook对象:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public static MemoryStream RenderToExcel(DataTable table)
    {
        MemoryStream ms = new MemoryStream();
     
        using (table)
        {
            using (IWorkbook workbook = new HSSFWorkbook())
            {
                using (ISheet sheet = workbook.CreateSheet())
                {
                    IRow headerRow = sheet.CreateRow(0);
     
                    // handling header.
                    foreach (DataColumn column in table.Columns)
                        headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption);//If Caption not set, returns the ColumnName value
     
                    // handling value.
                    int rowIndex = 1;
     
                    foreach (DataRow row in table.Rows)
                    {
                        IRow dataRow = sheet.CreateRow(rowIndex);
     
                        foreach (DataColumn column in table.Columns)
                        {
                            dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
                        }
     
                        rowIndex++;
                    }
     
                    workbook.Write(ms);
                    ms.Flush();
                    ms.Position = 0;
                }
            }
        }
        return ms;
    }
     

    使用NPOI导入

    需要注意的是,sheet.LastRowNum = sheet.PhysicalNumberOfRows - 1,这里可能存在BUG:当没有数据或只有一行数据时sheet.LastRowNum为0,PhysicalNumberOfRows 表现正常

    这里读取流中的Excel来创建Workbook对象,并转换成DataTable:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    static DataTable RenderFromExcel(Stream excelFileStream)
    {
        using (excelFileStream)
        {
            using (IWorkbook workbook = new HSSFWorkbook(excelFileStream))
            {
                using (ISheet sheet = workbook.GetSheetAt(0))//取第一个表
                {
                    DataTable table = new DataTable();
     
                    IRow headerRow = sheet.GetRow(0);//第一行为标题行
                    int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells
                    int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1
     
                    //handling header.
                    for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                    {
                        DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
                        table.Columns.Add(column);
                    }
     
                    for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
                    {
                        IRow row = sheet.GetRow(i);
                        DataRow dataRow = table.NewRow();
     
                        if (row != null)
                        {
                            for (int j = row.FirstCellNum; j < cellCount; j++)
                            {
                                if (row.GetCell(j) != null)
                                    dataRow[j] = GetCellValue(row.GetCell(j));
                            }
                        }
     
                        table.Rows.Add(dataRow);
                    }
                    return table;
     
                }
            }
        }
    }

    转载于:https://www.cnblogs.com/chm74/p/3642646.html

    展开全文
  • NPOI 2.2.1

    2018-03-21 11:19:35
    C# NPOI2.2.1 Net4.0和Net2.0。NPOI.dll运行库下载 包括NPOI.dll,NPOI.OOXML.dll,NPOI.OOXML.xml,NPOI.OpenXml4Net.dll,NPOI.OpenXml4Net.xml,NPOI.OpenXmlFormats.dll,NPOI.xml。
  • npoi压缩包

    2018-03-18 14:46:35
    NPOI 是 POI 项目的 .NET 版本,使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。
  • NPOI This project is the .NET version of POI Java project. With NPOI, you can read/write Office 2003/2007 files very easily. Get Started with NPOI Getting Started with NPOI How to use NPOI on ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,689
精华内容 2,675
关键字:

NPOI