java导入excel文件的数据
实现java批量导入excel文件能让我们在处理数据方面带来了很多方便之处。
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
注意:POI是对Microsoft Office格式档案读和写的功能,
所以你要用的必须是Microsoft Office的excel
所以要实现java导入excel文件,我们先需要导入poi的包,下面就是用maven项目导包,
具体如下:
<!-- excel依赖包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
- 首先我们创建一个excel表单,下面只是一个例子:
- 现在就开始用java读取excel表单中的数据:
package com.yc.onlineExam.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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 ReadExcelToDB {
//将double类型的值小数位保留0位
private DecimalFormat df=new DecimalFormat("0");
/**
* 将Excel中的数据读取到一个集合中
* @param fl
* @return
* @throws IOException
* @throws FileNotFoundException
*/
@SuppressWarnings("resource")
public List<Map<String,String>> importExcel(File fl) throws FileNotFoundException, IOException{
List<Map<String,String>>list=new ArrayList<Map<String,String>>();
//创建一个excel对象
Workbook workbook=null;
//获取文件名
String fileName=fl.getName().toLowerCase();
if(fileName.endsWith("xls")){//如果excel文件以xls结尾,就创建HSSFWorkbook对象
workbook=new HSSFWorkbook(new FileInputStream(fl));
}else if(fileName.endsWith("xlsx")){//如果excel文件以xlsx结尾,就创建XSSFWorkbook对象
workbook=new XSSFWorkbook(new FileInputStream(fl));
}else{//如果都不是就抛出异常
throw new RuntimeException("您选择的文件不是一个Excel文件....");
}
//通过表名获取一张表
Sheet sheet=workbook.getSheet("Sheet1");
int rows=sheet.getLastRowNum();//获取最后一行的编号,即总共有多少行
if(rows<=1){//第一行是标题
throw new RuntimeException("表格中没有数据....");
}
//循环获取每一行的数据
Row row=null;
Iterator<Cell> cols=null;//获取列
Map<String,String> map=null;
String[] colName={"qname","tid","cid","ans1","ans2","ans3","ans4","ans","analysis"};
int index=0;
for(int i=1;i<=rows;i++){
index=0;
row=sheet.getRow(i);//获取这一行的列的信息
if(row==null){
continue;
}
cols=row.cellIterator();//获取这一行所有列的值
map=new HashMap<String,String>();
while(cols.hasNext()){
map.put(colName[index], getCelltoString(cols.next()));
index++;
}
list.add(map);
}
return list;
}
/**
* 将类型全部转换成String
* @param next
* @return
*/
private String getCelltoString(Cell cell) {
if(cell==null){
return "";
}
String str="";
switch(cell.getCellType()){
case STRING:str=cell.getStringCellValue();break;
case NUMERIC:str=String.valueOf(df.format(cell.getNumericCellValue()));break;
case BOOLEAN:str=String.valueOf(cell.getBooleanCellValue());break;
case FORMULA:str=String.valueOf(cell.getCellFormula());break;
case ERROR:str="";break;
case BLANK:str="";break;
default:str="";break;
}
return str;
}
public static void main(String[] args) throws FileNotFoundException, IOException {
//excel表格的路径
File fl=new File("C:\\Users\\yjj\\Documents\\question.xls");
ReadExcelToDB read=new ReadExcelToDB();
List<Map<String,String>> list=read.importExcel(fl);
for(Map<String,String> lst:list){
System.out.println(lst);
}
}
}
这样就可以获取到表格信息啦。。。。运行结果如下:
希望这篇文章能帮助到你。