Java 解析Excel(xls、xlsx两种格式)详解编程语言

Java 解析Excel(xls、xlsx两种格式)

一、环境

  JDK 1.8

二、JAR

  1.commons-collections4-4.1.jar

  2.poi-3.9-20121203.jar

  3.poi-examples-3.9-20121203.jar

  4.poi-excelant-3.9-20121203.jar

  5.poi-ooxml-3.9-20121203.jar

  6.poi-ooxml-schemas-3.9-20121203.jar

  7.poi-scratchpad-3.9-20121203.jar

  8.xmlbeans-2.3.0.jar

  注意:jar版本为3.9

三、主要API

  1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;

  2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;

  3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;

  4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;

  5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;

  6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

四、示例

package poi; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.DateUtil; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
public class Testpoi { 
public static void main(String[] args) { 
Workbook wb =null; 
Sheet sheet = null; 
Row row = null; 
List<Map<String,String>> list = null; 
String cellData = null; 
String filePath = "D://test.xlsx"; 
String columns[] = {"name","age","score"}; 
wb = readExcel(filePath); 
if(wb != null){ 
//用来存放表中数据 
list = new ArrayList<Map<String,String>>(); 
//获取第一个sheet 
sheet = wb.getSheetAt(0); 
//获取最大行数 
int rownum = sheet.getPhysicalNumberOfRows(); 
//获取第一行 
row = sheet.getRow(0); 
//获取最大列数 
int colnum = row.getPhysicalNumberOfCells(); 
for (int i = 1; i<rownum; i++) { 
Map<String,String> map = new LinkedHashMap<String,String>(); 
row = sheet.getRow(i); 
if(row !=null){ 
for (int j=0;j<colnum;j++){ 
cellData = (String) getCellFormatValue(row.getCell(j)); 
map.put(columns[j], cellData); 
} 
}else{ 
break; 
} 
list.add(map); 
} 
} 
//遍历解析出来的list 
for (Map<String,String> map : list) { 
for (Entry<String,String> entry : map.entrySet()) { 
System.out.print(entry.getKey()+":"+entry.getValue()+","); 
} 
System.out.println(); 
} 
} 
//读取excel 
public static Workbook readExcel(String filePath){ 
Workbook wb = null; 
if(filePath==null){ 
return null; 
} 
String extString = filePath.substring(filePath.lastIndexOf(".")); 
InputStream is = null; 
try { 
is = new FileInputStream(filePath); 
if(".xls".equals(extString)){ 
return wb = new HSSFWorkbook(is); 
}else if(".xlsx".equals(extString)){ 
return wb = new XSSFWorkbook(is); 
}else{ 
return wb = null; 
} 
} catch (FileNotFoundException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
return wb; 
} 
public static Object getCellFormatValue(Cell cell){ 
Object cellValue = null; 
if(cell!=null){ 
//判断cell类型 
switch(cell.getCellType()){ 
case Cell.CELL_TYPE_NUMERIC:{ 
cellValue = String.valueOf(cell.getNumericCellValue()); 
break; 
} 
case Cell.CELL_TYPE_FORMULA:{ 
//判断cell是否为日期格式 
if(DateUtil.isCellDateFormatted(cell)){ 
//转换为日期格式YYYY-mm-dd 
cellValue = cell.getDateCellValue(); 
}else{ 
//数字 
cellValue = String.valueOf(cell.getNumericCellValue()); 
} 
break; 
} 
case Cell.CELL_TYPE_STRING:{ 
cellValue = cell.getRichStringCellValue().getString(); 
break; 
} 
default: 
cellValue = ""; 
} 
}else{ 
cellValue = ""; 
} 
return cellValue; 
} 
}

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16632.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论