package com.ruijie.dinnerorder.web.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelUtils {
private static String sheetName = "data";
private HSSFWorkbook wb;
private HSSFSheet sheet;
private HSSFRow row;
private HSSFCell cell;
private HSSFFont font;
private HSSFCellStyle cellStyle;
private FileOutputStream fileOut;
public ExcelUtils() {
wb = new HSSFWorkbook();
}
/**
* @param excelName
* excel名称。
* @param list
* 这个list里面存放的是对象数组。数组元素可以转化为字符串显示的。这个对象数组一般对应数据库里的几列。
* @param firstRowValue
* */
public void outputExcel(String excelName, List list, String[] firstRowValue) {
try {
this.createSheet(firstRowValue);
this.setValueToRow(excelName, list);
} catch (Exception ex) {
System.out.print(ex);
} // System.out.println("文件名是:" + excelName); downloadFile(excelName); }
}
public void outputExcel(String excelName, List list) {
try {
this.setValueToRow(excelName, list);
} catch (Exception e) {
// TODO: handle exception
}
downloadFile(excelName);
}
/**
* 设置excel的没一行的值...
* @param excelName
* @param list
*/
private void setValueToRow(String excelName, List list) {
// 获得JSF上下文环境
FacesContext context = FacesContext.getCurrentInstance();
// 获得ServletContext对象
ServletContext servletContext = (ServletContext) context
.getExternalContext().getContext();
// 取得文件的绝对路径
excelName = servletContext.getRealPath("/UploadFile") + "/" + excelName;
System.out.println("生成文件的路径是:" + excelName);
Object[] obj;
try {
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
obj = (Object[]) list.get(i);
this.createCell(row, obj);
}
fileOut = new FileOutputStream(excelName);
wb.write(fileOut);
} catch (Exception ex) {
System.out.print("生成报表有误:" + ex);
} finally {
try {
fileOut.flush();
fileOut.close();
} catch (Exception e) {
System.out.println("ExcelUtil.setValueToRow()");
}
}
}
/**
* 创建表头
* @param firstRowValue
*/
private void createSheet(String[] firstRowValue) {
try {
sheet = wb.createSheet(ExcelUtils.sheetName);
row = sheet.createRow(0);
font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
cellStyle = wb.createCellStyle();
cellStyle.setFont(font);
for (int i = 0; i < firstRowValue.length; i++) {
cell = row.createCell((short) i);
cell.setCellStyle(cellStyle);
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(firstRowValue[i]);
}
} catch (Exception ex) {
System.out.print(ex);
}
}
/**
* 创建表格的值
* @param row
* @param obj
*/
private void createCell(HSSFRow row, Object[] obj) {
try {
for (int i = 0; i < obj.length; i++) {
cell = row.createCell((short) i);
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(obj[i].toString());
}
} catch (Exception ex) {
System.out.print(ex);
}
}
/**
* <p>
* 功能说明:根据提供的文件名下载文件,不支持中文文件名
* </p>
* 此方法由yongtree添加,实现文件生成后的下载
*
* @param strfileName
* String
* @return void
*/
private static void downloadFile(String strfileName) {
try {
// 获得JSF上下文环境
FacesContext context = FacesContext.getCurrentInstance();
// 获得ServletContext对象
ServletContext servletContext = (ServletContext) context
.getExternalContext().getContext();
// 取得文件的绝对路径
String excelName = servletContext.getRealPath("/UploadFile") + "/"
+ strfileName;
File exportFile = new File(excelName);
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream servletOutputStream = httpServletResponse
.getOutputStream();
httpServletResponse.setHeader("Content-disposition",
"attachment; filename=" + strfileName);
httpServletResponse.setContentLength((int) exportFile.length());
httpServletResponse.setContentType("application/x-download");
// httpServletResponse.setContentType("application/vnd.ms-excel");
byte[] b = new byte[1024];
int i = 0;
FileInputStream fis = new java.io.FileInputStream(exportFile);
while ((i = fis.read(b)) > 0) {
servletOutputStream.write(b, 0, i);
}
} catch (IOException e) {
e.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();
}
}
jxl excelUtils
最新推荐文章于 2021-11-09 11:38:19 发布