Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载详解编程语言

java通用的Excel文件创建方法,支持同文件多tab页创建。只需要调用静态方法,传递List<String>表头和List<Map>数据集合等,即可生成Excel文件。

package com.matols.utils; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
import org.apache.poi.hssf.usermodel.HSSFFont; 
import org.apache.poi.hssf.usermodel.HSSFRichTextString; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.util.HSSFColor; 
import com.google.common.collect.Lists; 
/** 
* Excel工具类 
*/ 
public class ExcelUtils { 
public static void main(String[] args) throws Throwable { 
String path = "D:/tj/统计报表.xls"; 
//表头 
List<String> headers = Lists.newArrayList(); 
for (int i = 1; i < 10; i++) { 
headers.add("表头"+i); 
} 
//数据行 
List<Map> datas = new ArrayList<Map>(); 
Map m = null; 
for(int i=1;i<10;i++){ 
m = new HashMap(); //一行数据集 
for(int j=0;j<headers.size();j++){ 
m.put(j, "第"+i+" 行数据:"+j); 
} 
datas.add(m); 
} 
ExpExs(path,"","统计报表",headers,datas); 
} 
/* 
* 通用的Excel文件创建方法 
*   title:首行标题: 2015年度统计报表 
*  sheets:sheet的tab标签页说明: 15年度报表 
* headers:表头:List存放表头  编号、姓名、备注 
*   datas:数据行:list存放实体数据,map存放具体每一行数据,和headers对应。 
*      rs:HttpServletResponse响应作用域,如果不为null,会直接将文件流输出到客户端,下载文件 
*/ 
public static void ExpExs(String title,String sheets,List headers,List<Map> datas,HttpServletResponse rs){ 
try {  
if(sheets== null || "".equals(sheets)){ sheets = "sheet"; } 
HSSFWorkbook workbook = new HSSFWorkbook();  
HSSFSheet sheet = workbook.createSheet(sheets); //+workbook.getNumberOfSheets() 
HSSFRow row; 
HSSFCell cell; 
// 设置这些样式 
HSSFFont font = workbook.createFont(); 
font.setFontName(HSSFFont.FONT_ARIAL);//字体 
font.setFontHeightInPoints((short) 16);//字号  
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗 
//font.setColor(HSSFColor.BLUE.index);//颜色 
HSSFCellStyle cellStyle= workbook.createCellStyle(); //设置单元格样式 
cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); 
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER ); 
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
cellStyle.setFont(font); 
//产生表格标题行        
row = sheet.createRow(0); 
row.setHeightInPoints(20); 
for (int i = 0; i < headers.size(); i++) {  
HSSFRichTextString text = new HSSFRichTextString(headers.get(i).toString());   
cell = row.createCell(i); 
cell.setCellValue(text);  
cell.setCellStyle(cellStyle); 
}   
cellStyle= workbook.createCellStyle();  
cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); 
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
cellStyle.setDataFormat((short)0x31);//设置显示格式,避免点击后变成科学计数法了 
//cellStyle.setWrapText(true);//设置自动换行 
Map map; 
//遍历集合数据,产生数据行   
for (int i=0; i <datas.size(); i++) {  
row=sheet.createRow((i+1)); 
row.setHeightInPoints(20); 
map = datas.get(i); 
for(int j=0;j<map.size();j++) { 
cell = row.createCell(j); 
cell.setCellStyle(cellStyle); 
cell.setCellType(HSSFCell.CELL_TYPE_STRING); 
if(map.get(j) != null) { 
cell.setCellValue(new HSSFRichTextString(map.get(j).toString()));  
}else{ 
cell.setCellValue(new HSSFRichTextString(""));      
} 
} 
}    
for (int i = 0; i < headers.size(); i++) {  
sheet.autoSizeColumn((short)i); 
} 
rs.reset(); 
rs.setContentType("multipart/form-data"); //自动识别 
rs.setHeader("Content-Disposition","attachment;filename=data.xls"); 
//文件流输出到rs里 
workbook.write(rs.getOutputStream()); 
rs.getOutputStream().flush(); 
rs.getOutputStream().close(); 
} catch (Exception e) {   
System.out.println("#Error ["+e.getMessage()+"] "); 
}  
System.out.println("["+sheets+"] 创建成功..."); 
System.out.println(""); 
}    
/* 
* 通用的Excel文件创建方法 
*    path:保存路径: C:/xls/统计报表.xls 
*   title:首行标题: 2015年度统计报表 
*  sheets:sheet的tab标签页说明: 15年度报表 
* headers:表头:List存放表头  编号、姓名、备注 
*   datas:数据行:list存放实体数据,map存放具体每一行数据,和headers对应。 
*/ 
public static void ExpExs(String path,String title,String sheets,List headers,List<Map> datas){ 
try {  
if(sheets== null || "".equals(sheets)){ sheets = "sheet"; } 
boolean isExist = new File(path).exists(); 
if(!isExist){ 
HSSFWorkbook workbook = new HSSFWorkbook(); 
HSSFSheet sheet = workbook.createSheet(sheets); 
FileOutputStream out = new FileOutputStream(new File(path)); 
workbook.write(out); 
out.flush(); 
out.close(); 
} 
FileInputStream file = new FileInputStream(new File(path)); 
HSSFWorkbook workbook = new HSSFWorkbook(file); 
HSSFSheet sheet = null; 
if(!isExist){ 
sheet = workbook.getSheetAt(0); 
}else{ 
if(workbook.getSheet(sheets) == null){ 
sheet = workbook.createSheet(sheets); //+workbook.getNumberOfSheets() 
}else{ 
System.out.println("文件:["+path+"] ["+sheets+"] 已经存在..."); 
System.out.println(""); 
return; 
} 
} 
HSSFRow row; 
HSSFCell cell; 
// 设置这些样式 
HSSFFont font = workbook.createFont(); 
font.setFontName(HSSFFont.FONT_ARIAL);//字体 
font.setFontHeightInPoints((short) 16);//字号  
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗 
//font.setColor(HSSFColor.BLUE.index);//颜色 
HSSFCellStyle cellStyle= workbook.createCellStyle(); //设置单元格样式 
cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); 
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER ); 
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
cellStyle.setFont(font); 
//产生表格标题行        
row = sheet.createRow(0); 
row.setHeightInPoints(20); 
for (int i = 0; i < headers.size(); i++) {  
HSSFRichTextString text = new HSSFRichTextString(headers.get(i).toString());   
cell = row.createCell(i); 
cell.setCellValue(text);  
cell.setCellStyle(cellStyle); 
}   
cellStyle= workbook.createCellStyle();  
cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); 
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
cellStyle.setDataFormat((short)0x31);//设置显示格式,避免点击后变成科学计数法了 
//cellStyle.setWrapText(true);//设置自动换行 
Map map; 
//遍历集合数据,产生数据行   
for (int i=0; i <datas.size(); i++) {  
row=sheet.createRow((i+1)); 
row.setHeightInPoints(20); 
map = datas.get(i); 
for(int j=0;j<map.size();j++) { 
cell = row.createCell(j); 
cell.setCellStyle(cellStyle); 
cell.setCellType(HSSFCell.CELL_TYPE_STRING); 
if(map.get(j) != null) { 
cell.setCellValue(new HSSFRichTextString(map.get(j).toString()));  
}else{ 
cell.setCellValue(new HSSFRichTextString(""));      
} 
} 
}    
for (int i = 0; i < headers.size(); i++) {  
sheet.autoSizeColumn((short)i); 
} 
FileOutputStream out = new FileOutputStream(new File(path)); 
workbook.write(out); 
out.flush(); 
out.close(); 
/* 
HSSFRow row = sheet.createRow(sheets); 
HSSFCell cell = null; 
cell=row.createCell(sheets); 
cell.setCellValue(new HSSFRichTextString("-["+sheets+"]-")); 
sheets=sheets+2;//中间空一行 
row=sheet.createRow(sheets); 
*/ 
} catch (Exception e) {   
System.out.println("#Error ["+e.getMessage()+"] "); 
}  
System.out.println("文件:["+path+"] ["+sheets+"] 创建成功..."); 
System.out.println(""); 
} 
}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10243.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论