導航:首頁 > 文件教程 > poi解析excel文件

poi解析excel文件

發布時間:2023-04-26 05:35:09

A. 如何提高poi讀寫excel文件(同一文件)的效率

我的代碼
//導入普通客戶信息

publicStringimportExcle(){

TEmployeeemployee=(TEmployee)request.getSession().getAttribute(

"employee");

TCustomerInfoc=newTCustomerInfo();

//聲明數據流

InputStreamis=null;

if(employee!=null){

inthang=0;

intlie=0;

if(excel!=null){

try{

//解析excel2007版本文件

is=newFileInputStream(excel);

XSSFWorkbookwork=newXSSFWorkbook(is);

XSSFSheetsheet=work.getSheetAt(0);

introws=sheet.getPhysicalNumberOfRows();

//循環表的行,從第二行開始


for(inti=1;i<rows;i++){

hang=i+1;

c=newTCustomerInfo();

XSSFRowrow=sheet.getRow(i);

if(row==null){//判斷是否為空

continue;

}

//讀取該行的每一列

for(intj=0;j<row.getPhysicalNumberOfCells();j++){

XSSFCellcell=row.getCell(j);

if(cell==null){

continue;

}

if(cell.toString()==null

||"".equals(cell.toString())){

continue;

}

Stringv=Util.getXssfCellValue(cell);

switch(j){//通過列數來判斷對應插如的欄位

case0:

c.setCompanyName(v);

break;

case1:

c.setLinkName(v);

break;

case2:

c.setTell(v);

break;

case3:

c.setTelephone(v);

break;

case4:

c.setPosition(v);

break;

case5:

c.setEmail(v);

break;

case6:

c.setCompanyType(v);

break;

case7:

c.setCustomerType(v);

break;

case8:

c.setCompanyDetail(v);

break;

}

c.setCreateMan(employee.getName());

c.setCreateDate(newDate());


}

customerInfoBiz.addCustomer(c);

}

request.setAttribute("message","導入成功(=^_^=)");


}catch(Exceptione){

System.out.println("進入---解析excel2003版本文件--錯誤拋出");

try{

//解析excel2003版本文件


is=newFileInputStream(excel);

HSSFWorkbookwork=newHSSFWorkbook(is);

HSSFSheetsheet=work.getSheetAt(0);

if(sheet!=null){

introws=sheet.getPhysicalNumberOfRows();

//循環表的行,從第二行開始

for(inti=1;i<rows;i++){

hang=i+1;

c=newTCustomerInfo();

HSSFRowrow=sheet.getRow(i);

if(row==null){//判斷是否為空

continue;

}

//循環表格的列

for(shortj=0;j<row

.getPhysicalNumberOfCells();j++){

HSSFCellcell=row.getCell(j);

if(cell==null){

continue;

}

if(cell.toString()==null||"".equals(cell.toString())){

continue;

}

Stringv=Util.getHssfCellValue(cell);

switch(j){//通過列數來判斷對應插如的欄位

case0:


c.setCompanyName(v);

break;

case1:


c.setLinkName(v);

break;

case2:


c.setTell(v);

break;

case3:


c.setTelephone(v);

break;

case4:


c.setPosition(v);

break;

case5:


c.setEmail(v);

break;

case6:


c.setCompanyType(v);

break;

case7:


c.setCustomerType(v);

break;

case8:


c.setCompanyDetail(v);

break;

}

c.setCreateMan(v);

c.setCreateDate(newDate());

}

customerInfoBiz.addCustomer(c);

}

request.setAttribute("message","導入成功(=^_^=)");

}

}catch(Exceptione1){

request.setAttribute("message","第"+hang+"行,第"

+lie+"列開始導入失敗,請注意導入格式!!");

e1.printStackTrace();

}

}

}

}else{

request.setAttribute("message","登錄超時,請重新登錄!!");

}

//查詢時對象中含有值對查詢有誤

if(customer!=null){

customer=null;

}


returncustomerList();

}

B. poi解析excel2003和2007有沒有辦法是用同樣的方法實現

Poi解析2003時使用的是HSSFCell,而2007的則是
XSSFCell,是完全不同的兩套API
必須先要判斷excel的類型,不過 HSSFWorkbook 和 XSSFWorkbook 實現的介面都漏核散是一樣的Workbook,直接在實氏正例化介面的時候有點區別其他時候沒有任何差異。
比如,剛剛獲取excle文件流,先判斷excel格式確定用03還是07處理類實例化Workbook介面。
view sourceprint?
01.Workbook workbook = null;
02.if(Constants.ImportExport.EXCEL.equals(fileExtension))
03.{
04.workbook = new HSSFWorkbook(fin);
05.}
06.else
07.{
08.workbook = new XSSFWorkbook(fin);
09.}
獲取workbook 後,後續處理Sheet、Row、Cell 統統用介面實現,不用關注返氏03,07差異性。也就是根本不會涉及到 XSSFCell、HSSFCell這些類。
相關類或介面:
view sourceprint?
1.import org.apache.poi.ss.usermodel.Workbook;
2.import org.apache.poi.hssf.usermodel.HSSFWorkbook;
3.import org.apache.poi.xssf.usermodel.XSSFWorkbook;
4.
5.import org.apache.poi.ss.usermodel.Sheet;
6.import org.apache.poi.ss.usermodel.Row;
7.import org.apache.poi.ss.usermodel.Cell;

C. java使用poi解析或處理excel的時候,如何防止數字變成科學計數法的

思路為:為了防止數字變成科學計數法方式表示,在源文件以及java代碼中都用文本的方式去生成和襲察解析excel,具體如下:

1.生成Excel時,設置單元格格式為STRING,即:

//關鍵代碼
HSSFCellcell=newHSSFCell();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);

2.同理,解析察脊的時候,首先要保證源excel文件中該單元格格式是文本類型的,然後在java代碼里用STRING類型去解敗禪滲析:

//關鍵代碼
Stringvalue=cell.getStringCellValue();

D. java poi根據列頭解析excel

這個需要你自己寫方法. 遍歷你毀伏模的表頭行每廳森個單元格的數據
對比你傳的參數 匹配時 返回 該單元格的列號. 然後再用不同的row去get得到的纖緩列號

E. java 用POI處理比較大的word和excel文檔。

java的主要有兩種方法
1、使用POI,這樣的包,直接的是根據office文件的相應規則,進行解析封裝
2、使用jcob這樣的,通過調用office的dll文件,操作

第一種優點:
不需要在環境上安裝office,純java環境,開發文檔較全,使用方便
缺點:
對於office的某些功能,特性兼容不是很全面,但一般的內容也可以滿足

第二種優點:
對於office文件的兼容性良好,和使用word,excel的操作基本上是一樣的
缺點:
由於是通過java調用office來完成,所以需要在環境上安裝office,文檔較少

F. poi解析excel表頭不在一行

原因是POI導轎手純入Excel文件時,讀取的數據少了一行。
如果是使用 XSSFSheet 對象來獲取行數的話,那獲取閉咐行數的方法應該是:
1.XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
2.XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
3.int row = xssfSheet.getPhysicalNumberOfRows();
而不是使用int rows = xssfSheet.getLastRowNum();來獲薯蠢得行數。

閱讀全文

與poi解析excel文件相關的資料

熱點內容
蘋果手機小風扇圖app叫什麼 瀏覽:292
繁體中文輸入工具 瀏覽:916
pc桌面壁紙文件夾 瀏覽:473
微信怎麼添加群 瀏覽:781
40歲男人適合的微信名 瀏覽:925
編程里比例怎麼打 瀏覽:215
蘋果12兩個app如何分屏 瀏覽:592
ps下載完不是壓縮文件 瀏覽:362
電腦中的個人文件包括什麼 瀏覽:572
網路連接一般什麼密碼 瀏覽:199
java定時器quartz實例 瀏覽:259
稻殼excel文件太大怎麼弄 瀏覽:901
文件里的視頻如何保存到相冊 瀏覽:428
手機百度雲文件電腦 瀏覽:957
編程怎麼做到時鍾精準 瀏覽:912
錘子用過的壁紙在哪個文件里 瀏覽:468
qq網站安全性未知訪問不了怎麼辦 瀏覽:270
燕秀怎麼修改編程人名字 瀏覽:789
2012年天之眼導航升級 瀏覽:595
如何安裝視頻文件 瀏覽:315

友情鏈接