npoi獲取合併單元格 NPOI操作EXCEL

2021-10-14 15:01:59 字數 3322 閱讀 1349

年專案有乙個子模組需要解析上百張不一樣的excel**入庫,當時用的npoi,做了很久...也嘗試想把**分享到oschina,結果沒堅持兩篇就放棄了。

趕巧的是,昨天運營那邊提出要錄入一些基礎資料,我想著也就幾百個員工、企業的資訊,自己找兩個姑娘手動錄入唄(為啥是姑娘?讓乙個大老爺們去錄假資料,你去嗎?反正我不去)...結果,乙個同事吭哧吭哧跑來找我:

「手動錄入太慢了,填一堆基本資訊,還要傳頭像,傳身份證,傳營業執照什麼的」

嗯哼!想讓我寫**給你們錄?沒門!

那同事晃悠著腦袋想了想,說「幾萬條資料呢,手動錄得猴年馬月了。再說資料格式本來就很整齊,也能和名字匹配上」...然後嘻嘻的望著我

窩艹,怎麼感覺挖坑把自己埋了。再說,尼瑪現在的運營假資料都是上萬條上萬條的入庫了?我們這些小碼農還是太呆啊...

自己挖的坑,含著淚也得填完。

這不,今天又翻出了去年那個專案的**和資料,撲哧撲哧的幹活...

先來介紹一下npoi基本的東西:

2.包裡面的dll檔案:

npoi.dll

ooxml.dll

openxml4net.dll

openxmlformats.dll

icsharpcode.sharpziplib.dll

3.npoi 2.0以後的版本都支援ooxml(excel2007及以上版本)。帶xssf的命名空間支援07及以上,hssf支援03版本。

xssf中xssfworkbook,xssfsheet,xssfrow,xssfcell分別對應excel中工作簿,工作表,行,列。

hssf中同樣有hssfworkbook,hssfsheet,hssfrow,hssfcell

它們繼承於同乙個介面:iworkbook(命名空間:using npoi.ss.usermodel;)

可以用如下**做版本判斷(暫時只考慮.xls與.xlsx檔案,博主沒用.csv)

iworkbook workbook = null;if(system.io.path.getextension(filepath)=="xls")else if(system.io.path.getextension(filepath)=="xlsx")else
4.常用的基本方法:

建立工作簿                                                 iworkbook workbook = new xssfworkbook();

按指定名稱建立sheet                                   workbook.createsheet("sheetname");

移出sheet                                                 workbook.removesheetat(sheetindex);

按名稱獲得sheet物件                                   isheet sheet = workbook.getsheet("sheetname ");

根據索引獲得sheet物件                                isheet sheet = workbook.getsheetat(sheetindex);

獲得某乙個isheet的所有irow,通常可以用       isheet.getrowenumerator()

獲得某一特定行,可以直接用                          isheet.getrow(rowindex)

工作表中第乙個有資料行的行號                       isheet.firstrownum

工作表中最後乙個有資料行的行號                    isheet.lastrownum

一行中第乙個有資料列的列號                          irow.firstcellnum

一行中最後乙個有資料列的列號                       irow.lastcellnum

獲取sheet所有合併單元格索引                        isheet.nummergedregions

獲取某合併單元格的位址(i是合併單元格索引)      isheet.getmergedregion(i)

獲得資料型別cellrangeaddress,含起始行號和列號

獲取某單元格值                                         row.getcell(j).stringcellvalue.trim()

公式單元格如果是數字可以:row.getcell(j).numericcellvalue.tostring()

5.npoi.dll中包含的模組

npoi.util          基礎輔助庫 

npoi.poifs      ole2格式讀寫庫,主要負責處理documentinformation 

npoi.ddf        microsoft drawing格式讀寫庫 

npoi.ss          excel 2003和excel 2007操作庫共用的介面庫以及公用模組實現,如公式計算庫  

npoi.hpsf       ole2的summary information和document summary information屬性讀寫庫 

npoi.hssf      excel biff格式讀寫庫,這是使用者用的最多的命名空間

6.npoi.ooxml.dll中包含的模組(主要是2007版本操作方法)

npoi.xssf          excel 2007操作庫,大部分物件都實現了npoi.ss的介面 

npoi.xwpf         word 2007操作庫

7.excel單元格值基本型別

unknown = -1,  // 未知

numeric = 0,  // 數值型

string = 1,  // 文字型

formula = 2,  // 公式型

blank = 3,  // 空白

boolean = 4,  // 布林型

error = 5,  // 錯誤

感覺基本常用的就是這些,需要用到其它介面可以直接查api。

今天也是把npoi再複習一遍,寫了一些基本的操作**和上傳設計。明天上傳方法寫好再繼續貼出來分享給大家....

博主的基本思想是,對每乙個excel模板都做乙個對應的xml配置檔案,裡面是規則集。然後所有模板的excel上傳均通過乙個方法,解析資料與規則集,最後反射到dto,再根據業務對映到不同實體,呼叫不同add服務入庫

npoi獲取合併單元格 NPOI合併單元格

var filepath d 練習 雜項 npoi合併單元格 aaa.xlsx iworkbook workbook null isheet sheet null using filestream fs file.openread filepath 2007版本 if filepath.indexo...

NPOI獲取合併單元格

匯入 public static datatable roaddt string filepath 2003版本 else if filepath.indexof xls stringcomparison.ordinal 0 if workbook null else tryrownum 1 con...

Npoi 合併單元格

一 緣由。最近公司的乙個需求,匯出 excel,相同的資料進行合併,並且 還有 二級合併。最終效果圖如下 哈哈哈哈哈,圖表略微有些醜陋,請大家不要介意。他的原始資料,是一條一條的,如下圖 二 匯出 處理 邏輯。try setautocolumn sheet1,i sheet1 就是 在記憶體中 填充...