Java 中POI 導(dǎo)入EXCEL2003 和EXCEL2007的實(shí)現(xiàn)方法
Java 中POI 導(dǎo)入EXCEL2003 和EXCEL2007的實(shí)現(xiàn)方法
實(shí)現(xiàn)代碼:
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.POIXMLException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* excel 導(dǎo)入功能
* @author lyq 20150312
* @version 1.0
*/
public class ExcelUtils {
public List<Object[]> importExcel(String filePath) throws Exception{
List<Object[]> list=new ArrayList<Object[]>();
String fileType=filePath.substring(filePath.lastIndexOf(".")+1);
try {
if("xls".equalsIgnoreCase(fileType)){
list= importExcel03(filePath);
}else{
list= importExcel07(filePath);
}
} catch(OfficeXmlFileException e){//通過(guò)手動(dòng)修改文件名 引起的異常 比如 3.xlsx 重命名 3.xls 其實(shí)際文件類(lèi)型為xlsx
list=importExcel07(filePath);
} catch(POIXMLException e){//通過(guò)手動(dòng)修改文件名 引起的異常 比如 3.xls 重命名 3.xlsx 其實(shí)際文件類(lèi)型為xls
list=importExcel03(filePath);
}
return list;
}
public List<Object[]> importExcel03(String filePath) throws IOException{
FileInputStream in=new FileInputStream(filePath);
List<Object[]> list=new ArrayList<Object[]>();
HSSFWorkbook wb=new HSSFWorkbook(in);
HSSFSheet sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
HSSFRow row=sheet.getRow(0);
int cells=row.getLastCellNum();
Object[] csr=null;
for(int i=1;i<rows;i++){
row=sheet.getRow(i);
csr=new String[cells];
for(int j=0;j<cells;j++){
HSSFCell cell=row.getCell(j);
Object obj=null;
if(cell!=null){
obj=getValue(cell);
}
csr[j]=obj;
}
list.add(csr);
}
if(in!=null)in.close();
return list;
}
public List<Object[]> importExcel07(String filePath) throws IOException{
List<Object[]> list=new ArrayList<Object[]>();
FileInputStream in=new FileInputStream(filePath);
XSSFWorkbook wb=new XSSFWorkbook(in);
XSSFSheet sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
XSSFRow row=sheet.getRow(0);
int cells=row.getLastCellNum();
Object[] csr=null;
for(int i=1;i<rows;i++){
row=sheet.getRow(i);
csr=new String[cells];
for(int j=0;j<cells;j++){
XSSFCell cell=row.getCell(j);
Object obj=null;
if(cell!=null){
obj=getValue(cell);
}
csr[j]=obj;
}
list.add(csr);
}
if(in!=null)in.close();
return list;
}
@SuppressWarnings("static-access")
public String getValue(Cell cell){
int type=cell.getCellType();
String s="";
if(type==cell.CELL_TYPE_NUMERIC){
if(HSSFDateUtil.isCellDateFormatted(cell)){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
s=sdf.format(cell.getDateCellValue());
}else {
BigDecimal db = new BigDecimal(cell.getNumericCellValue());
s=String.valueOf(db);
}
}else if(type==cell.CELL_TYPE_STRING){
s=cell.getStringCellValue();
}else if(type==cell.CELL_TYPE_BOOLEAN){
s=cell.getBooleanCellValue()+"";
}else if(type==cell.CELL_TYPE_FORMULA){
s=cell.getCellFormula();
}else if(type==cell.CELL_TYPE_BLANK){
s=" ";
}else if(type==cell.CELL_TYPE_ERROR){
s=" ";
}else{
}
return s.trim();
}
/**
* @param args
*/
public static void main(String[] args) {
ExcelUtils ex=new ExcelUtils();
try {
List<Object[]> list=ex.importExcel("D:\\3.xls");
for(Object[] ss:list){
for(Object s:ss){
System.out.print(s+"\t");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
jdk使用版本(影響excel07)
所使用的核心jar如下
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
xmlbeans-2.3.0.jar
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)
這篇文章主要介紹了Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用(1)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11
Java實(shí)現(xiàn)FTP上傳到服務(wù)器
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)FTP上傳到服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解
這篇文章主要為大家介紹了Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
使用Feign調(diào)用注解組件(實(shí)現(xiàn)字段賦值功能)
這篇文章主要介紹了使用Feign調(diào)用注解組件(實(shí)現(xiàn)字段賦值功能),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
feign服務(wù)端發(fā)現(xiàn)異??蛻?hù)端處理的方法介紹
這篇文章主要給大家介紹了關(guān)于feign服務(wù)端發(fā)現(xiàn)異常客戶(hù)端處理的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用feign具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Spring獲取當(dāng)前類(lèi)在容器中的beanname實(shí)現(xiàn)思路
這篇文章主要介紹了Spring獲取當(dāng)前類(lèi)在容器中的beanname,實(shí)現(xiàn)思路只需繼承BeanNameAware接口,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
restTemplate實(shí)現(xiàn)跨服務(wù)API調(diào)用方式
這篇文章主要介紹了restTemplate實(shí)現(xiàn)跨服務(wù)API調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-07-07

