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 不顯示

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM