您的位置:首页 > 运维架构 > Apache

apache poi 生成excel

2016-03-17 20:46 507 查看
ExcelBuilder.Java


packagecom.coracle.yk.xmanager.util.poi;

importcom.coracle.yk.xframework.util.BlankUtil;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.Row;

importjava.util.List;
importjava.util.Map;

/**
*Excel工具类
*创建Sheet,填充数据
*author:huangbaidong
*created:2016/3/18.
*/
publicclassExcelBuilder{

/**
*创建只包含标题列的sheet表
*@paramwb
*@paramsheetName
*@paramtitleNames
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitle(HSSFWorkbookwb,StringsheetName,List<String>titleNames){
if(BlankUtil.isNotEmpty(titleNames)){
returncreateExcelSheetWithTitle(wb,sheetName,titleNames.toArray(newString[titleNames.size()]));
}
returncreateExcelSheetWithTitle(wb,sheetName,newString[]{});
}

/**
*创建只包含标题列的sheet表
*@paramwb
*@paramsheetName
*@paramtitleNames
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitle(HSSFWorkbookwb,StringsheetName,String[]titleNames){
if(BlankUtil.isEmpty(sheetName)){//如果没传sheetName,给定默认值
sheetName="Sheet";
}
HSSFSheetsheet=wb.createSheet(sheetName);
sheet.setDefaultColumnWidth(20);//设置默认列宽
sheet.setDefaultRowHeight((short)300);//设置默认行高
if(BlankUtil.isNotEmpty(titleNames)){//设置Sheet首行列标题
Rowrow=sheet.createRow(0);
Cellcell=null;
for(inti=0;i<titleNames.length;i++){
cell=row.createCell(i);
cell.setCellValue(titleNames[i]);
}
}
returnsheet;
}

/**
*创建包含标题列的sheet,并填充数据
*@paramwb
*@paramsheetName
*@paramtitleNames
*@paramdatas
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitleAndData(
HSSFWorkbookwb,StringsheetName,List<String>titleNames,List<Map<String,Object>>datas){
if(BlankUtil.isNotEmpty(titleNames)&&BlankUtil.isNotEmpty(datas)){
returncreateExcelSheetWithTitleAndData(wb,sheetName,titleNames.toArray(newString[titleNames.size()]),datas);
}
returncreateExcelSheetWithTitle(wb,sheetName,newString[]{});
}

/**
*创建包含标题列的sheet,并填充数据
*@paramwb
*@paramsheetName
*@paramtitleNames
*@paramdatas
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitleAndData(
HSSFWorkbookwb,StringsheetName,String[]titleNames,List<Map<String,Object>>datas){
HSSFSheetsheet=createExcelSheetWithTitle(wb,sheetName,titleNames);//创建包含标题列的空sheet
fillDataToSheet(sheet,datas);//给sheet填充数据
returnsheet;
}

/**
*向sheet中填充数据行
*@paramsheet
*@paramdatas
*/
publicstaticHSSFSheetfillDataToSheet(HSSFSheetsheet,List<Map<String,Object>>datas){
if(sheet!=null&&BlankUtil.isNotEmpty(datas)){
Rowrow=null;
Cellcell=null;
Map<String,Object>rowDataMap=null;
ObjectcolumnValue=null;
//第一行是标题行,所以从第二行开始插入数据
for(introwIndex=0;rowIndex<datas.size();rowIndex++){
row=sheet.createRow(rowIndex+1);//从第二行开始
rowDataMap=datas.get(rowIndex);
intcolumnIndex=0;
for(Stringkey:rowDataMap.keySet()){
cell=row.createCell(columnIndex);
columnValue=rowDataMap.get(key);
if(columnValueinstanceofInteger){
cell.setCellValue((Integer)columnValue);
}elseif(columnValueinstanceofLong){
cell.setCellValue((Long)columnValue);
}else{
cell.setCellValue(String.valueOf(columnValue));
}
columnIndex++;
}
}
}
returnsheet;
}

}



ExcelTest.java



publicstaticvoidmain(Stringargs[])throwsIOException{
Stringpath="d:\\statistic.xls";
//POIFSFileSystemfs=newPOIFSFileSystem(newFileInputStream("d:/test.xls"));
HSSFWorkbookwb=newHSSFWorkbook();
List<Map<String,Object>>datas=newArrayList<Map<String,Object>>();
Map<String,Object>map1=newLinkedHashMap<String,Object>();
map1.put("name","zhangsan");
map1.put("age",10);
map1.put("sex","男");
map1.put("birthday",Xiruo.stringToDate("2015-3-512:22:33"));
Map<String,Object>map2=newLinkedHashMap<String,Object>();
map2.put("name","lisi");
map2.put("age",13);
map2.put("sex","女");
map2.put("birthday",Xiruo.stringToDate("2015-3-612:22:33"));
datas.add(map1);
datas.add(map2);
HSSFSheetsheet1=ExcelBuilder.createExcelSheetWithTitle(wb,null,newString[]{"姓名","年龄","性别","生日"});
ExcelBuilder.fillDataToSheet(sheet1,datas);
//false表示不追加,每次都重写
FileOutputStreamfileOut=newFileOutputStream(path,false);
wb.write(fileOut);
}






packagecom.coracle.yk.xmanager.util.poi;

importcom.coracle.yk.xframework.util.BlankUtil;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Cell;
importorg.apache.poi.ss.usermodel.Row;

importjava.util.List;
importjava.util.Map;

/**
*Excel工具类
*创建Sheet,填充数据
*author:huangbaidong
*created:2016/3/18.
*/
publicclassExcelBuilder{

/**
*创建只包含标题列的sheet表
*@paramwb
*@paramsheetName
*@paramtitleNames
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitle(HSSFWorkbookwb,StringsheetName,List<String>titleNames){
if(BlankUtil.isNotEmpty(titleNames)){
returncreateExcelSheetWithTitle(wb,sheetName,titleNames.toArray(newString[titleNames.size()]));
}
returncreateExcelSheetWithTitle(wb,sheetName,newString[]{});
}

/**
*创建只包含标题列的sheet表
*@paramwb
*@paramsheetName
*@paramtitleNames
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitle(HSSFWorkbookwb,StringsheetName,String[]titleNames){
if(BlankUtil.isEmpty(sheetName)){//如果没传sheetName,给定默认值
sheetName="Sheet";
}
HSSFSheetsheet=wb.createSheet(sheetName);
sheet.setDefaultColumnWidth(20);//设置默认列宽
sheet.setDefaultRowHeight((short)300);//设置默认行高
if(BlankUtil.isNotEmpty(titleNames)){//设置Sheet首行列标题
Rowrow=sheet.createRow(0);
Cellcell=null;
for(inti=0;i<titleNames.length;i++){
cell=row.createCell(i);
cell.setCellValue(titleNames[i]);
}
}
returnsheet;
}

/**
*创建包含标题列的sheet,并填充数据
*@paramwb
*@paramsheetName
*@paramtitleNames
*@paramdatas
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitleAndData(
HSSFWorkbookwb,StringsheetName,List<String>titleNames,List<Map<String,Object>>datas){
if(BlankUtil.isNotEmpty(titleNames)&&BlankUtil.isNotEmpty(datas)){
returncreateExcelSheetWithTitleAndData(wb,sheetName,titleNames.toArray(newString[titleNames.size()]),datas);
}
returncreateExcelSheetWithTitle(wb,sheetName,newString[]{});
}

/**
*创建包含标题列的sheet,并填充数据
*@paramwb
*@paramsheetName
*@paramtitleNames
*@paramdatas
*@return
*/
publicstaticHSSFSheetcreateExcelSheetWithTitleAndData(
HSSFWorkbookwb,StringsheetName,String[]titleNames,List<Map<String,Object>>datas){
HSSFSheetsheet=createExcelSheetWithTitle(wb,sheetName,titleNames);//创建包含标题列的空sheet
fillDataToSheet(sheet,datas);//给sheet填充数据
returnsheet;
}

/**
*向sheet中填充数据行
*@paramsheet
*@paramdatas
*/
publicstaticHSSFSheetfillDataToSheet(HSSFSheetsheet,List<Map<String,Object>>datas){
if(sheet!=null&&BlankUtil.isNotEmpty(datas)){
Rowrow=null;
Cellcell=null;
Map<String,Object>rowDataMap=null;
ObjectcolumnValue=null;
//第一行是标题行,所以从第二行开始插入数据
for(introwIndex=0;rowIndex<datas.size();rowIndex++){
row=sheet.createRow(rowIndex+1);//从第二行开始
rowDataMap=datas.get(rowIndex);
intcolumnIndex=0;
for(Stringkey:rowDataMap.keySet()){
cell=row.createCell(columnIndex);
columnValue=rowDataMap.get(key);
if(columnValueinstanceofInteger){
cell.setCellValue((Integer)columnValue);
}elseif(columnValueinstanceofLong){
cell.setCellValue((Long)columnValue);
}else{
cell.setCellValue(String.valueOf(columnValue));
}
columnIndex++;
}
}
}
returnsheet;
}

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