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

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

2015-01-19 18:37 441 查看
最近在做文件

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;

以上代码仅供参考;当然若有什么建议的话,可以提出来;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: