读书人

POI写资料测试

发布时间: 2012-07-20 10:38:30 作者: rapoo

POI写文件测试

我想测试一下POI怎么写文件,并封装成一个类,用来方便从数据库数据转成excel文件;

这个类中方法是:在构造方法中要输入xls文件的名字;

调用nextSheet()方法,就会在开始在下一个sheet中写数据;

调用writeline()方法就换行;

调用write(Ojbect)方法,就根据数据类型来写入数据;

?

第一次写的代码如下:

?

测试代码:

List<List<?>> tmpData = sheetdata.get(sheetNum);
for (int rowNum = 0; rowNum < tmpData.size(); rowNum++) {
row = sheet.createRow(rowNum);
List<?> line = tmpData.get(rowNum);
for (int cellNum = 0; cellNum < line.size(); cellNum++) {
cell = row.createCell(cellNum);
Object obj = line.get(cellNum);
writeObj(obj, cell);
}
}
}

fileOut = new FileOutputStream(filename);
wb.write(fileOut);
fileOut.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e);
}

}

public void nextSheet() {
rowCellData = new ArrayList<List<?>>();
sheetdata.add(rowCellData);
cellData = new ArrayList<Object>();
rowCellData.add(cellData);
sheetNum++;
}

public void writeline() {
cellData = null;
}

public void write(Object obj) {
if(cellData == null) {
cellData = new ArrayList<Object>();
rowCellData.add(cellData);
}
cellData.add(obj);
}

public void writeObj(Object obj, HSSFCell cell) {
if (obj == null) {

} else if (obj instanceof Date) {
writeDate((Date) obj, cell);
} else if (obj instanceof Calendar) {
writeDate(((Calendar) obj).getTime(), cell);
} else if (obj instanceof Number) {
writeNumber((Number) obj, cell);
} else if (obj instanceof String) {
writeString((String) obj, cell);
} else {
writeString(obj.toString(), cell);
}
}

private void writeString(String obj, HSSFCell cell) {
cell.setCellValue(obj);
}

private void writeNumber(Number obj, HSSFCell cell) {
if ((obj.doubleValue() - obj.longValue()) == 0) {
cell.setCellValue(obj.intValue());
} else {
cell.setCellValue(obj.doubleValue());
}

}

private void writeDate(Date obj, HSSFCell cell) {
HSSFCellStyle style = wb.createCellStyle();
short dateFormat = wb.createDataFormat().getFormat(this.dateFormat);
style.setDataFormat(dateFormat);
cell.setCellStyle(style);
cell.setCellValue(obj);
}


}

?红色部份是主要的修正部份,但是这种方法会浪费内存,用来存放数据的List

读书人网 >开源软件

热点推荐