在Javaweb中poi实现数据导入,支持03版和07版Excel导入

注意数据类型的转换,另外由于在后面的sid我不需要插入数据库,所以最后就没有set到实体对象

哪些不明白可以直问!


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


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.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
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;


import com.ky.jlj_test.bo.Jlj_testStudent;


public class ImportExcel {
String sid = null;
String sname = null;
String sex = null;
String birthday = null;
String address = null;
String tel = null;
String classno = null;
List<Jlj_testStudent> stuList = new ArrayList<Jlj_testStudent>();
Workbook workbook = null;
int k = 0;
int flag = 0; // 指示指针所访问的位置


@SuppressWarnings("deprecation")
public List<Jlj_testStudent> importExcel(File file) throws IOException,
ParseException {
/*
* 2007版的读取方法
*/


if (file != null) {
String path = file.getAbsolutePath();
System.out.println("文件上传的路径:" + path);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/M/d");// 日期转换


try {
workbook = new XSSFWorkbook(path);// 初始化workbook对象
for (int numSheets = 0; numSheets < workbook
.getNumberOfSheets(); numSheets++) { // 读取每一个sheet
System.out
.println("============2007版进入读取sheet的循环===========");


if (null != workbook.getSheetAt(numSheets)) {
XSSFSheet aSheet = (XSSFSheet) workbook
.getSheetAt(numSheets);// 定义Sheet对象


for (int rowNumOfSheet = 1; rowNumOfSheet <= aSheet
.getLastRowNum(); rowNumOfSheet++) { // 跳过第一行字段,一般为中文解释词


// 进入当前sheet的行的循环
if (null != aSheet.getRow(rowNumOfSheet)) {
XSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 定义行,并赋值


for (int cellNumOfRow = 0; cellNumOfRow <= aRow
.getLastCellNum(); cellNumOfRow++) { // 读取rowNumOfSheet值所对应行的数据
XSSFCell xCell = aRow.getCell(cellNumOfRow); // 获得行的列数
// //获得列值


// System.out.println("type="+xCell.getCellType());
if (null != aRow.getCell(cellNumOfRow)) {
if (xCell.getCellType() == XSSFCell.CELL_TYPE_STRING) { // 为字符串型


if (cellNumOfRow == 0) {
aRow.getCell(0).setCellType(
Cell.CELL_TYPE_STRING);
sid = xCell
.getStringCellValue();
if (sid == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的学号不能为空");
}
} else if (cellNumOfRow == 1) {
aRow.getCell(1).setCellType(
Cell.CELL_TYPE_STRING);
sname = xCell
.getStringCellValue();
if (sname == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的姓名不能为空");
}
} else if (cellNumOfRow == 2) {
aRow.getCell(2).setCellType(
Cell.CELL_TYPE_STRING);
sex = xCell
.getStringCellValue();
if (sex == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的性别不能为空");
}
} else if (cellNumOfRow == 3) {
Date date = HSSFDateUtil
.getJavaDate(xCell
.getNumericCellValue());
birthday = sdf.format(date);
if (birthday == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的出生日期不能为空");
}
} else if (cellNumOfRow == 4) {
aRow.getCell(4).setCellType(
Cell.CELL_TYPE_STRING);
address = xCell
.getStringCellValue();
if (address == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的住址不能为空");
}
} else if (cellNumOfRow == 5) {
aRow.getCell(5).setCellType(
Cell.CELL_TYPE_STRING);
tel = xCell
.getStringCellValue();
if (tel == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的联系方式不能为空");
}
} else if (cellNumOfRow == 6) {
aRow.getCell(6).setCellType(
Cell.CELL_TYPE_STRING);
classno = xCell
.getStringCellValue();
if (classno == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的班级不能为空");
}
}
}
if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { // 为数值型
if (cellNumOfRow == 0) {
aRow.getCell(0).setCellType(
Cell.CELL_TYPE_STRING);
sid = xCell
.getStringCellValue()
+ "";
if (sid == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的学号不能为空");
}
} else if (cellNumOfRow == 1) {
aRow.getCell(1).setCellType(
Cell.CELL_TYPE_STRING);
sname = String.valueOf(xCell
.getStringCellValue());
if (sname == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的姓名不能为空");
}
} else if (cellNumOfRow == 2) {
aRow.getCell(2).setCellType(
Cell.CELL_TYPE_STRING);
sex = String.valueOf(xCell
.getStringCellValue());
if (sex == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的性别不能为空");
}
} else if (cellNumOfRow == 3) {
Date date = HSSFDateUtil
.getJavaDate(xCell
.getNumericCellValue());
birthday = sdf.format(date);
if (birthday == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的出生日期不能为空");
}
} else if (cellNumOfRow == 4) {
aRow.getCell(4).setCellType(
Cell.CELL_TYPE_STRING);
address = String.valueOf(xCell
.getStringCellValue());
if (address == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的住址不能为空");
}
} else if (cellNumOfRow == 5) {
aRow.getCell(5).setCellType(
Cell.CELL_TYPE_STRING);
tel = String.valueOf(xCell
.getStringCellValue());
if (tel == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的联系方式不能为空");
}
} else if (cellNumOfRow == 6) {
aRow.getCell(6).setCellType(
Cell.CELL_TYPE_STRING);
classno = String.valueOf(xCell
.getStringCellValue());
if (classno == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的班级不能为空");
}
}
} else if (xCell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {
System.out.println("提示:在Sheet"
+ (numSheets + 1) + "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的值为空,请查看核对是否符合约定要求");
}
}
}
}
if (flag == 7) {
System.out.println("Excel格式与预定格式相符");
}
if (sname != null && sex != null
&& birthday != null && address != null
&& tel != null && classno != null) {
Jlj_testStudent stu = new Jlj_testStudent();
stu.setSname(sname);
stu.setSex(sex);
stu.setBirthday(sdf.parse(birthday));
stu.setAddress(address);
stu.setTel(tel);
stu.setClassno(classno);


stuList.add(stu);
System.out.println("这是第" + (k + 1) + "次读到的数据:"
+ stuList.get(k));
k++;
} // 获得一行,即读取每一行
}
}
}
} catch (Exception e) {


// 下面使用的是2003除了workbook的赋值不同其它与2007基本相同,
InputStream is = new FileInputStream(path);
workbook = new HSSFWorkbook(is);
try {
for (int numSheets = 0; numSheets < workbook
.getNumberOfSheets(); numSheets++) { // 读取每一个sheet
System.out
.println("=============2003版进入读取sheet的循环==============");
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = (HSSFSheet) workbook
.getSheetAt(numSheets);


for (int rowNumOfSheet = 1; rowNumOfSheet <= aSheet
.getLastRowNum(); rowNumOfSheet++) { // 获得一行
// 进入当前sheet的行的循环
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 定义行,并赋值


for (int cellNumOfRow = 0; cellNumOfRow <= aRow
.getLastCellNum(); cellNumOfRow++) { // 读取rowNumOfSheet值所对应行的数据
HSSFCell xCell = aRow
.getCell(cellNumOfRow); // 获得行的列数
// //获得列值


// System.out.println("type="+xCell.getCellType());
if (null != aRow.getCell(cellNumOfRow)) {
if (xCell.getCellType() == XSSFCell.CELL_TYPE_STRING) { // 为字符串型


if (cellNumOfRow == 0) {
aRow.getCell(0)
.setCellType(
Cell.CELL_TYPE_STRING);
sid = xCell
.getStringCellValue();
if (sid == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的学号不能为空");
}
} else if (cellNumOfRow == 1) {
aRow.getCell(1)
.setCellType(
Cell.CELL_TYPE_STRING);
sname = xCell
.getStringCellValue();
if (sname == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的姓名不能为空");
}
} else if (cellNumOfRow == 2) {
aRow.getCell(2)
.setCellType(
Cell.CELL_TYPE_STRING);
sex = xCell
.getStringCellValue();
if (sex == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的性别不能为空");
}
} else if (cellNumOfRow == 3) {
Date date = HSSFDateUtil
.getJavaDate(xCell
.getNumericCellValue());
birthday = sdf.format(date);
if (birthday == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的出生日期不能为空");
}


} else if (cellNumOfRow == 4) {
aRow.getCell(4)
.setCellType(
Cell.CELL_TYPE_STRING);
address = xCell
.getStringCellValue();
if (address == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的住址不能为空");
}
} else if (cellNumOfRow == 5) {
aRow.getCell(5)
.setCellType(
Cell.CELL_TYPE_STRING);
tel = xCell
.getStringCellValue();
if (tel == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的联系方式不能为空");
}
} else if (cellNumOfRow == 6) {
aRow.getCell(6)
.setCellType(
Cell.CELL_TYPE_STRING);
classno = xCell
.getStringCellValue();
if (classno == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的班级不能为空");
}
}
}
if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { // 为数值型
if (cellNumOfRow == 0) {
aRow.getCell(0)
.setCellType(
Cell.CELL_TYPE_STRING);
sid = xCell
.getStringCellValue()
+ "";
if (sid == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的学号不能为空");
}
} else if (cellNumOfRow == 1) {
aRow.getCell(1)
.setCellType(
Cell.CELL_TYPE_STRING);
sname = String
.valueOf(xCell
.getStringCellValue());
if (sname == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的姓名不能为空");
}
} else if (cellNumOfRow == 2) {
aRow.getCell(2)
.setCellType(
Cell.CELL_TYPE_STRING);
sex = String
.valueOf(xCell
.getStringCellValue());
if (sex == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的性别不能为空");
}
} else if (cellNumOfRow == 3) {
Date date = HSSFDateUtil
.getJavaDate(xCell
.getNumericCellValue());
birthday = sdf.format(date);
if (birthday == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的出生日期不能为空");
}
} else if (cellNumOfRow == 4) {
aRow.getCell(4)
.setCellType(
Cell.CELL_TYPE_STRING);
address = String
.valueOf(xCell
.getStringCellValue());
if (address == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的住址不能为空");
}
} else if (cellNumOfRow == 5) {
aRow.getCell(5)
.setCellType(
Cell.CELL_TYPE_STRING);
tel = String
.valueOf(xCell
.getStringCellValue());
if (tel == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的联系方式不能为空");
}
} else if (cellNumOfRow == 6) {
aRow.getCell(6)
.setCellType(
Cell.CELL_TYPE_STRING);
classno = String
.valueOf(xCell
.getStringCellValue());
if (classno == null) {
System.out
.println("错误:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的班级不能为空");
}
}
} else if (xCell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {
System.out
.println("提示:在Sheet"
+ (numSheets + 1)
+ "中的第"
+ (rowNumOfSheet + 1)
+ "行的第"
+ (cellNumOfRow + 1)
+ "列的值为空,请查看核对是否符合约定要求");
}
}
}


if (flag == 7) {
System.out.println("Excel格式与预定格式相符");
}
if (sname != null && sex != null
&& birthday != null
&& address != null && tel != null
&& classno != null) {
Jlj_testStudent stu = new Jlj_testStudent();
stu.setSname(sname);
stu.setSex(sex);
stu.setBirthday(sdf.parse(birthday));
stu.setAddress(address);
stu.setTel(tel);
stu.setClassno(classno);


stuList.add(stu);
System.out.println("这是第" + (k + 1)
+ "次读到的数据:" + stuList.get(k));
k++;
}
}
}
}
}


} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (is != null)
is.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}


}
return stuList;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值