参数讲解:
1.第一个参数:第一行显示的信息(如 姓名 年龄 升高 体重 等等)
2.第二个参数:为要替换进去的数据(比如 name age hight weight ..)
3.第三个参数:为从数据库中查出的数据
4.第四个参数:为文件名可以随便起
public static<T> void exportExcel(List<String> headAttribute,List<String> bodyAttribute,List<T> bodyData,String fileName){
MutiStyleExcelWrite mew = new MutiStyleExcelWrite();
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = attributes.getResponse();
response.reset();
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;fileName="+fileName+System.currentTimeMillis()+".xls");
response.setContentType("application/shlnd.ms-excel");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try{
mew.createExcel(response.getOutputStream(),bodyData, bodyAttribute, headAttribute,fileName, fileName);
}catch(Exception e){
throw new RuntimeException(e);
}
}
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class MutiStyleExcelWrite {
public <T> void createExcel(OutputStream os,List<T> objList,
List<String> propOrderList, List<String> tableHeadList,
String excelName, String sheetName) throws WriteException,IOException {
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
//创建新的一页
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
//构造表头
createExcelHead(sheet,tableHeadList);
WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑体
WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber);
if(objList!=null&&!"".equals(objList)){
for (int objNum = 0; objNum < objList.size(); objNum++) {
for (int cellNum = 0; cellNum < propOrderList.size(); cellNum++) {
// 将属性的首字母大写
String propertyName = propOrderList.get(cellNum).replaceFirst(
propOrderList.get(cellNum).substring(0, 1),
propOrderList.get(cellNum).substring(0, 1)
.toUpperCase());
//设置单元格宽度
sheet.setColumnView(cellNum+1,15);
try {
// 如果type是类类型,则前面包含"class ",后面跟类名
Method m = objList.get(objNum).getClass()
.getMethod("get" + propertyName);
// 调用getter方法获取属性值
Object property = m.invoke(objList.get(objNum));
//整形数据
if (property instanceof Integer ) {
Number ints = new Number(cellNum,1+objNum,(Integer)property);
sheet.addCell(ints);
}else if(property instanceof Float){
Number ints = new Number(cellNum,1+objNum,(Float)property);
sheet.addCell(ints);
}else if(property instanceof Double){
Number ints = new Number(cellNum,1+objNum,(Double)property);
sheet.addCell(ints);
}else if(property instanceof Long){
Number ints = new Number(cellNum,1+objNum,(Long)property);
sheet.addCell(ints);
}else if (property instanceof Date) {
String strdate = TimeHelper.dateTimeToStr2((Date) property,
"yyyy-MM-dd HH:mm:ss") ;
Label example = new Label(cellNum,1+objNum,strdate);
sheet.addCell(example);
}
else{
Label example = new Label(cellNum,1+objNum,(String)property,boldNumberFormate);
sheet.addCell(example);
}
} catch (Exception e) {
log.error("生成excel解析数据出错:"+ e);
}
}
}
}
//把创建的内容写入到输出流中,并关闭输出流
workbook.write();
workbook.close();
os.close();
}
public void createExcelHead( WritableSheet sheet,
List<String> tableHeadList) throws RowsExceededException, WriteException {
for (int cellNum = 0; cellNum < tableHeadList.size(); cellNum++) {
Label floats = new Label(cellNum,0,tableHeadList.get(cellNum));
sheet.addCell(floats);
}
}
}