NPOI

Posted 生命不息bug不止

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NPOI相关的知识,希望对你有一定的参考价值。

NPOI是POI的.net版本, 是能够帮助开发者在没有安装微软office的情况下读写office文件,支持的文件包括excel,word,ppt等

 

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

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

 

创建一个Excel文档的步骤

HSSFWorkbook wk = new HSSFWorkbook();//初始化一个实例
//这个实例就相当于一个Excel文档,但是只是这样创建出的文档会报错,因为一个Excel文档中至少要有一个sheet(页)
wk.CreateSheet("页名");//为文档添加一页
FileStream file = new FileStream("路径和文件名",创建方式);//创建一个文件流
wk.Write(file);//把实例传给文件流,创建出文件
file.Close();//关闭文件流

 

 从excel读取数据,写入txt和从txt读取数据,写入excel的实例

using System.Text;
using System.Threading.Tasks;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using System.IO;
using NPOI.SS.UserModel;
namespace NPOI_and_TXT
{
   public class NPOItoTXT
    {
        public void toTXT() {
            FileStream fs = new FileStream(@"D:\\学习\\题\\npoi\\NPOI\\NPOI\\bin\\Debug\\test.xls",FileMode.Open,FileAccess.Read);
            FileStream fsn = new FileStream(@"D:\\学习\\题\\npoi\\NPOI\\NPOI\\bin\\Debug\\i.txt", FileMode.Create,FileAccess.Write);
            StreamWriter sw = new StreamWriter(fsn,Encoding.Default);
            HSSFWorkbook wk = new HSSFWorkbook(fs);
            ISheet hs =wk.GetSheet("sheet1");
            for (int i = 0; i < hs.LastRowNum+1; i++)
            {
                IRow ir = hs.GetRow(i);
                for (int j = 0; j < ir.LastCellNum; j++)
                {
                    sw.Write(ir.GetCell(j)+" ");
                }
                sw.WriteLine();
            }
            Console.WriteLine("更改txt成功");
            sw.Close();
            
        }
        
        
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using System.IO;
using NPOI.SS.UserModel;
namespace NPOI_and_TXT
{
    public class TXTtoNPOI
    {
        public void toNPOI() {
            FileStream fs = new FileStream(@"D:\\学习\\题\\npoi\\NPOI\\NPOI\\bin\\Debug\\i.txt",FileMode.Open,FileAccess.Read);
            StreamReader sr = new StreamReader(fs,Encoding.Default);
            HSSFWorkbook hwb = new HSSFWorkbook();
            ISheet hs =  hwb.CreateSheet("sheet1");
            List<string[]> list = new List<string[]>();
            string line = sr.ReadLine();
            int w = 0;
            while (line!=null)
            {
                HSSFRow row = (HSSFRow)hs.CreateRow(w);
                string[] s = line.Split(\' \');
                list.Add(s);
                for (int i = 0; i < s.Length; i++)
                {
                    row.CreateCell(i).SetCellValue(list[w][i]);
                }
                line = sr.ReadLine();
                w++;
            }
            Console.WriteLine("更改excel成功");
            FileStream file = new FileStream(@"D:\\学习\\题\\npoi\\NPOI\\NPOI\\bin\\Debug\\test.xls", FileMode.Create);
            hwb.Write(file);
            file.Close();
            fs.Close();
        }
    }
}

 

NPOI 高级功能

 

调整页面缩放比例

sheet.SetZoom(分子,分母) 
 
锁定列
被锁定的列无法修改,输入密码才可以解除锁定
ICellStyle Islock = hsk.CreateCellStyle();//创建一个列样式对象
Islock.IsLocked = true; //设置样式对象为锁定(false为不锁定)

ICell cel = sheet.GetRow(1).GetCell(1);//获取一个列
cel.CellStyle = Islock;//将样式对象赋给这个列

sheet.ProtectSheet("密码");//设置解锁密码
 
冻结行,列
被冻结的行,列会固定位置,鼠标下滚依然会显示在原位置
第一个参数表示要冻结的列数
第二个参数表示要冻结的行数
第三个参数表示右边区域默认的首例序号
第四个参数表示下边区域默认的首例序号
sheet.CreateFreezePane(3,1,10,10); //冻结第一行的前三列,右边和下面区域从第10格开始显示
 
默认选中
设为默认的列会在文档打开时自动选中
cell.SetAsActiveCell();

 

默认选中区域
第一个参数表示从哪行开始
第二个参数表示从哪行结束
第三个参数表示从哪列开始
第四个参数表示从哪列结束
sheet.SetActiveCellRange(2,5,1,5); //第3行开始 第6行结束 第2列开始 第6列结束

 

默认选中多个区域

List<CellRangeAddress8Bit> cellranges = new List<CellRangeAddress8Bit>(){
  new CellRangeAddress8Bit(1,3,2,5),  
  new CellRangeAddress8Bit(6,7,8,9)  
};//创建一个用来存储位置对象的list集合,并初始化两个位置
sheet.SetActiveCellRange(cellranges,10,5,8);//把集合给页

 

可视范围

sheet.TopRow = 10;
sheet.LeftCol = 10;
//从顶部向下,左边向右10格后的范围才能看到

 

默认页
文档打开时会自动切换到默认页
workbook.SetActiveSheet(1);//默认第二页 从0开始
 
数据有效性
检查输入的值是否符合条件,如果不对则会有提示
CellRangeAddressList cr = new CellRangeAddressList(1,10,0,0);//创建一个位置对象,用来表示检查的区域
DVConstraint constrain1 = DVConstraint.CreateDateConstraint(条件,"最小时间","最大时间","时间格式");//这是检查时间的方法,还有其他的检查方法
HSSFDataValidation dataValidate1 = new HSSFDataValidation(检查区域,检查条件);
dataValidate1.CreateErrorBox("标题","内容");//设置报错弹框
sheet.AddValidationData(dataValidate1);

 

组合数据
组合后数据类似于可以收缩和展开,方便查看
sheet.GroupRow(1,5);//组合第二行到第六行
sheet.GroupColumn(1,3);//组合第二列到第四列

 

隐藏网格
设置文档的是否显示网格
sheet.DisplayGridlines = false;//true 显示 false 不显示

 

 

以上是关于NPOI的主要内容,如果未能解决你的问题,请参考以下文章

NPOI 列宽自适应 代码示例

c#使用NPOI进行Excel导入导出,附源码,vs2010

NPOI操作Excel文件

NPOI通过NPOI从内存流中创建EXCEL

NPOI 导出 excel 性能测试

NPOI操作创建Excel