在日常的工作中,经常碰到需要将查询结果导出为Excel格式的数据进行查看或者保存。在此,介绍如何利用Apache的POI来进行此项工作。
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExportExcel ...{
//数据源
private List list ;
public ExportExcel(List list)...{
this.list = list ;
}
/** *//**
* 将list数据源里的数据导入到Excel表中
* @param fieldName 导出到Excel表中的表头名
* @param sheetName 工作表的名称
* @param output
*/
public void getExcel(String[] fieldName,String sheetName,OutputStream output)...{
//产生工作薄对象
HSSFWorkbook workbook = new HSSFWorkbook();
//产生工作表对象
HSSFSheet sheet = workbook.createSheet();
//为了工作表能支持中文,设置字符集为UTF_16
workbook.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_UTF_16);
//产生一行
HSSFRow row = sheet.createRow(0);
//产生单元格
HSSFCell cell ;
//写入各个字段的名称
for(int i=0;i<fieldName.length;i++)...{
//创建第一行各个字段名称的单元格
cell = row.createCell((short)i);
//设置单元格内容为字符串型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//为了能在单元格中输入中文,设置字符集为UTF_16
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//给单元格内容赋值
cell.setCellValue(fieldName[i]);
}
//写入各条记录,每条记录对应excel表中的一行
for(int i=0;i<list.size();i++)...{
row = sheet.createRow(i+1);
Object[] obj = (Object[])list.get(i);
for(int j=0;j<obj.length;j++)...{
cell = row.createCell((short)j);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
if((obj[j] instanceof Double) || (obj[j] instanceof Long) || (obj[j] instanceof Integer) || (obj[j] instanceof Short))...{
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(Double.parseDouble(String.valueOf(obj[j])));
}else...{
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(String.valueOf(obj[j]));
}
}
}
try ...{
output.flush();
workbook.write(output);
} catch (IOException e) ...{
e.printStackTrace();
}
}
}
import java.io.OutputStream;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExportExcel ...{
//数据源
private List list ;
public ExportExcel(List list)...{
this.list = list ;
}
/** *//**
* 将list数据源里的数据导入到Excel表中
* @param fieldName 导出到Excel表中的表头名
* @param sheetName 工作表的名称
* @param output
*/
public void getExcel(String[] fieldName,String sheetName,OutputStream output)...{
//产生工作薄对象
HSSFWorkbook workbook = new HSSFWorkbook();
//产生工作表对象
HSSFSheet sheet = workbook.createSheet();
//为了工作表能支持中文,设置字符集为UTF_16
workbook.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_UTF_16);
//产生一行
HSSFRow row = sheet.createRow(0);
//产生单元格
HSSFCell cell ;
//写入各个字段的名称
for(int i=0;i<fieldName.length;i++)...{
//创建第一行各个字段名称的单元格
cell = row.createCell((short)i);
//设置单元格内容为字符串型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//为了能在单元格中输入中文,设置字符集为UTF_16
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//给单元格内容赋值
cell.setCellValue(fieldName[i]);
}
//写入各条记录,每条记录对应excel表中的一行
for(int i=0;i<list.size();i++)...{
row = sheet.createRow(i+1);
Object[] obj = (Object[])list.get(i);
for(int j=0;j<obj.length;j++)...{
cell = row.createCell((short)j);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
if((obj[j] instanceof Double) || (obj[j] instanceof Long) || (obj[j] instanceof Integer) || (obj[j] instanceof Short))...{
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(Double.parseDouble(String.valueOf(obj[j])));
}else...{
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(String.valueOf(obj[j]));
}
}
}
try ...{
output.flush();
workbook.write(output);
} catch (IOException e) ...{
e.printStackTrace();
}
}
}
在这里,是用List结果集来存储查询结果的,list里面存储的是Object对象数组,这样方便通用,当然如果是其他的存储对象,在这里也可以修改下,使之达到符合实际要求。