本文需要使用到5個jar包分別是:poi-3.8-20120326.jar、poi-ooxml-3.8-20120326.jar、
poi-ooxml-schemas-3.8-20120326.jar、dom4j-1.6.1.jar、xmlbeans-2.3.0.jar。
書寫方法inputtingexcelpreview傳入檔案型別,返回型別為returnlistjson。
先宣告乙個輸入流inputstream並把檔案轉換為輸入流:inputstream is = new fileinputstream(file);
然後宣告乙個工作簿workbook,workbook hssfworkbook = null;獲取檔名,判斷檔案的格式如果為xlsx則以xssfworkbook類讀取檔案,如果為xls則以hssfworkbook類讀取檔案,如下:
string filename=file.
getname()
;if(filename.
endswith
("xlsx"))
else
if(filename.
endswith
("xls"))
宣告乙個int型別的變數存放excel**除首行以外的總行數,再宣告乙個int型別存放符合條件的資料的行數宣告乙個list存放讀取成功的資料,如下:
int count=0;
int success=0;
list
listsupplier=
newarraylist
();
通過迴圈遍歷工作表,獲取該工作表的首行,再迴圈遍歷工作表內的行,例項化乙個與資料對應的po類或vo類,然後迴圈遍歷行內的單元格,宣告乙個string型別的引數接收首行單元格的值判斷單元格的值,再宣告乙個string型別的引數接收對應列的值,通過比較首行單元格的值判斷**是否是需要匯入的**,再判斷對應列的值是否符合條件,符合條件的新增到例項後的po類或vo類中,不符合則跳出該行內單元格迴圈,當該行所有單元格符合條件時把例項後的po類或vo類放入list序列中。最後把序列寫入返回的資料的類中,在servlet中,把返回的資料中的list儲存到session中,返回的資料轉換為json格式返回到頁面,**如下:
// 迴圈工作表sheet
for(
int i =
0; i getnumberofsheets()
; i++
) row toprow = hssfsheet.
getrow(0
);count+=hssfsheet.
getlastrownum()
;// 迴圈行row
for(
int j =
1; j <= hssfsheet.
getlastrownum()
; j++)if
("**商名稱"
.equals
(name)
)elseif(
"跟進人"
.equals
(name)
)else
}else
}else}if
(state==
true)}
}}listjson=
newreturnlistjson
(1,"共預覽"
+count+
"條,成功預覽"
+success+
"條,資料異常"
+(count-success)
+"條!",0
,listsupplier)
;
儲存資料時在頁面請求servlet內的方法讀取session中的list並傳遞到daoimpl內的方法中使用迭代器迴圈遍歷呼叫新增sql語句並賦值後執行即可。
conn=dbutil.
getconnection()
;for
(iterator
iterator=listsupplier.
iterator()
;iterator.
hasnext()
;)
java poi 生成excel模板
一 手動生產excel模板 最笨的一種實現方式,不推薦使用 建立excel hssfworkbook wb new hssfworkbook 建立工作簿 hssfsheet sheet wb.createsheet title 建立表單 sheet.setdefaultcolumnwidth sho...
Java Poi建立與讀取Excel
建立excel表 public class test catch parseexception e 主函式 public static void main string args 建立下拉列表 sheet sethssfvalidation sheet,textlist,0,500,2,2 寫入實體...
java POI 實現匯出excel增加行
最近用poi實現根據模板匯出excel,需要從中間行插入查詢到的資料 但是用creatrow生成的資料會覆蓋後面的模板內容 查了api沒有找到插入行的方法 不過找到shiftrows方法將最後的空行移到需要插入行的位置,再用createrow生成 sheet.shiftrows insertrown...