java poi技术将Excel文件内容导入数据库

最近在做文件

poi解析Excel 文件步骤:

1.获取excel文件的数据流;

2.创建HSSFWorkbook 对象;

3.然后就是获取sheet对象,

4.最后就是解析sheet对象内的相关数据,

代码:

public List readExcelTitle(InputStream is) {
List<String> titlelist = new ArrayList<String>();
List list = new ArrayList();
try {
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
System.out.println("标题错误");
}
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
// 标题总列数
int colNum = row.getPhysicalNumberOfCells();
// 总行数
int rowNum = sheet.getLastRowNum();
// System.out.println("总列数:" + colNum);
for (int i = 0; i < colNum; i++) {
titlelist.add(getCellFormatValue(row.getCell((short) i)));
}
/**
* 内容
*/
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {// 行
Map content = new TreeMap();
for (int j = 0; j < colNum; j++) { // 列
String str = getCellFormatValue(sheet.getRow(i).getCell(
(short) j));
content.put(j, str);// 将值以键/值对方式保存到map对象中即(id:1,name:zhangsan,age:18)
}
list.add(content);
}
return list;
}

返回的list就是解析的数据,list对象内放的是map数组对象:


当然相对麻烦的就要是对Excel单元格类型的判断了:

*/
private String getCellFormatValue(HSSFCell cell) {
String cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
// 如果当前Cell的Type为NUMERIC
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是date类型则 ,获取该cell的date值
cellvalue = HSSFDateUtil.getJavaDate(
cell.getNumericCellValue()).toString();
} else { // 纯数字
cellvalue = String.valueOf((int)cell.getNumericCellValue()) ;
}
break;
case HSSFCell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则,转化为Data格式


// 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
// cellvalue = cell.getDateCellValue().toLocaleString();


// 方法2:这样子的data格式是不带带时分秒的:2011-10-12
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cellvalue = sdf.format(date);


}
// 如果是纯数字
else {
// 取得当前Cell的数值
cellvalue = String.valueOf(cell.getNumericCellValue()).trim();
}
break;
}
// 如果当前Cell的Type为STRING
case HSSFCell.CELL_TYPE_STRING:
// 取得当前的Cell字符串
cellvalue = cell.getStringCellValue();
break;
// 默认的Cell值
default:
cellvalue = "0";
}
} else {
cellvalue = "";
}
return cellvalue;
以上代码仅供参考;当然若有什么建议的话,可以提出来;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值