年專案有乙個子模組需要解析上百張不一樣的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 就是 在記憶體中 填充...