您的位置:首页 > 编程语言 > Java开发

【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)

2016-09-09 23:49 1351 查看
前言:在实际的开发中,我们经常需要用户在界面中输入大量重复且有规律的数据,但是一个表单一个表单的填写效率过慢,而且过多的表单也会给JavaWeb的业务逻辑开发带来不小的困扰,所以我们可以使用一个Excel文件来代替这些大量重复且有规律的数据。

使用java实现简单的Excel文件的导入与导出 (POI)

需要导入的jar包:

由于POI也是apache的一个子项目,所以我们直接去apache的官网直接下载即可:POI官网下载链接

Excel转ArrayList

/**
*
* 描述:excel转list
* 方法名: excelToList
* 类名:ExamServiceImpl
* 返回值类型:ArrayList<StudentInfoEntity>
* 开发者:暴沸
* 创建时间:2016年8月30日 下午8:48:17
* @param file
* @return
* @throws IOException
*/
//代码解释:此方法主要用于将Excel中的内容转为ArrayList
public ArrayList<StudentInfoEntity> excelToList(String URL) throws IOException {
//代码解释:此方法将传入一个URL,即为当前用户所上传的Excel的目标路径,然后返回一个泛型为StudentInfoEntity的ArrayList
//代码解释:实例化一个新的泛型为StudentInfoEntity的ArrayList对象,用于后面存放从Excel中解析到的内容
ArrayList<StudentInfoEntity> list = new ArrayList<>();

//代码解释:创建这个需要解析的Excel文件
File file = new File(URL);
//代码解释:创建Excel,读取文件内容,此处使用的是XSSFWorkbook,默认是2013版本,如果是比较老的版本,请使用HSSFWorkbook,其他均需要将X改为H
XSSFWorkbook workbook = new XSSFWorkbook(FileUtils.openInputStream(file));
//代码解释:读取默认第一个工作表sheet
XSSFSheet sheet = workbook.getSheetAt(0);
//代码解释:获取sheet中最后一行行号
int lastRowNum = sheet.getLastRowNum();
//代码解释:循环所有行
for (int i = 1; i <= lastRowNum; i++) {
//代码解释:获取当前行中的内容
XSSFRow row = sheet.getRow(i);
//代码解释:由于本人在Excel模版中设定的内容仅有两列有效,并且在其他行中,我存放了提示,所以这里不能使用自动获取最后一列,否则程序将出现错误。此处设置当前行最后单元格列号为2(为了避免因为我设置的提示而导致的错误)
int lastCellNum = 2;
//代码解释:循环单元格列号,此处主要是用于解析一行中的所有列,将其转化为集合(数组也可以),主要是为了方便后面的操作,此步骤非必须
ArrayList<String> list2 = new ArrayList<>();
int index=0;
//代码解释:获取该行中的数据,并存入集合中(数组也可以)
for (int j = 0; j < lastCellNum; j++) {
XSSFCell cell = row.getCell(j);
if(index<lastCellNum){
list2.add(cell.getStringCellValue());
}
}
//代码解释:实例化一个新的StudentInfoEntity对象用于存放上一个for循环中读取并将该行的数据存入即将返回的ArrayList中
StudentInfoEntity studentInfoEntity = new StudentInfoEntity();
studentInfoEntity.setStudentName(list2.get(0));
studentInfoEntity.setStudentNumber(list2.get(1));
list.add(studentInfoEntity);
}
return list;
}


ArrayList转Excel

/**
* 从数据库中获取数据,并利用POS生成Excel文件
* POI生成Excel文件
*
*/
public String downloadGrade(int examId,String contextPath,String examName) {

//从数据库中获取到的该考试所有考生的成绩的结果集
ArrayList<MarkEntity> markEntities = studentGradeDao.getStudentGrade(examId);

String[] title = {"学号","姓名","成绩","ip"};

//创建Excel工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个工作表sheet
XSSFSheet sheet = workbook.createSheet();
//创建第一行
XSSFRow row = sheet.createRow(0);
XSSFCell cell = null;
//插入第一行数据 学号,姓名,成绩,ip地址
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
//追加数据
int j = 1;
for (int i = 0; i < markEntities.size(); i++) {
MarkEntity markEntity = markEntities.get(i);
XSSFRow nextrow = sheet.createRow(j);
XSSFCell cell2 = nextrow.createCell(0);
cell2.setCellValue(markEntity.getStudentNumber());
cell2 = nextrow.createCell(1);
cell2.setCellValue(markEntity.getStudentName() );
cell2 = nextrow.createCell(2);
cell2.setCellValue(markEntity.getMark() );
cell2 = nextrow.createCell(3);
cell2.setCellValue(markEntity.getIp() );
j++;
}
//创建一个文件
String path = contextPath+"/"+examName+".xlsx";
File file = new File(path);
try {
file.createNewFile();
//将Excel内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
return path;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java poi excel java web apache