function exportExcel(){ var oXL = new ActiveXObject("Excel.Application"); var oWB = oXL.Workbooks.Add(); var oSheet = oWB.ActiveSheet; var item=document.getElementById("list"); var Lenr = item.rows.length; for (var i=0;i<Lenr;i++) { var Lenc = item.rows(i).cells.length; for (j=0;j<Lenc;j++) { oSheet.Cells(i+1,j+1).value = item.rows(i).cells(j).innerText; } } oXL.Visible = true; }
package com.belle.finance.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; 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; import org.apache.poi.hssf.util.HSSFColor; /** * Excel导出工具类 * @author yu.w * @date 2013-9-26 */ public class ExportXLSUtil { private static final Logger log=Logger.getLogger(ExportXLSUtil.class); private static final DateFormat dateFormat=new SimpleDateFormat(DateUtil.LONG_DATE_TIME_PATTERN); private static final int MAX_SHEET_ROW_SIZE=50000;//每个sheet中最大数据行数 /** * @param title Sheet标题名 * @param headers 表格属性列名数组 * @param dataset 需要显示的数据集合,属性的数据类型有基本数据类型及String,Date,byte[](图片数据) * @param amounts 是否为金额 */ public static HSSFWorkbook exportExcel(String title, String[] headers, List<Object[]> dataset, Boolean[] amounts) { if(headers==null || headers.length==0) { return null; } HSSFWorkbook workbook=new HSSFWorkbook();// 声明一个工作薄 HSSFCellStyle headStyle=getHeadStyle(workbook);// 生成表格头样式 if(dataset==null || dataset.isEmpty()) { HSSFSheet sheet=workbook.createSheet(title); // 设置表格默认列宽度为25个字符 sheet.setDefaultColumnWidth(25); //冻结表格头 sheet.createFreezePane(0,1,0,1); //填充表格头 fillHead(sheet,headers,headStyle); return workbook; } HSSFCellStyle dataStyle=getDataStyle(workbook);// 生成单元格数据样式 HSSFCellStyle moneyStyle=getMoneyStyle(workbook);// 生成金额单元格数据样式 int rows=dataset.size(); int sheetNum=rows%MAX_SHEET_ROW_SIZE==0 ? rows/MAX_SHEET_ROW_SIZE : rows/MAX_SHEET_ROW_SIZE+1; int fIndex=0; int lIndex=0; String temTitle=title; for(int i=0;i<sheetNum;i++) { fIndex=i*MAX_SHEET_ROW_SIZE; lIndex=i<sheetNum-1 ? fIndex+MAX_SHEET_ROW_SIZE : rows; // 生成一个表格 title=i==0 ? temTitle : temTitle+"("+(i+1)+")"; HSSFSheet sheet=workbook.createSheet(title); // 设置表格默认列宽度为25个字符 sheet.setDefaultColumnWidth(25); //冻结表格头 sheet.createFreezePane(0,1,0,1); //填充表格头 fillHead(sheet,headers,headStyle); //填充表格数据 fillData(sheet,dataset,fIndex,lIndex,amounts,dataStyle,moneyStyle); } return workbook; } /** * 填充表格数据 * @param sheet * @param headers * @param headStyle */ private static void fillHead(HSSFSheet sheet,String[] headers,HSSFCellStyle headStyle) { // 产生表格标题行 HSSFRow row=sheet.createRow(0); for(int i=0;i<headers.length;i++) { HSSFCell cell=row.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(headers[i]); } } /** * 填充表格数据 * @param workbook * @param sheet * @param headers * @param dataset * @param fIndex * @param lIndex * @param amounts * @param headStyle * @param dataStyle * @param moneyStyle */ private static void fillData(HSSFSheet sheet,List<Object[]> dataset,int fIndex,int lIndex,Boolean[] amounts,HSSFCellStyle dataStyle,HSSFCellStyle moneyStyle) { HSSFRow row=null; int rowNum=0; for(int i=fIndex;i<lIndex;i++) { row=sheet.createRow(++rowNum); row.setHeight((short)400); Object[] fields=dataset.get(i); for(int colNum=0;colNum<fields.length;colNum++) { HSSFCell cell=row.createCell(colNum); cell.setCellStyle(dataStyle); Object value=fields[colNum]; if(value!=null) { try { // 判断值的类型后进行强制类型转换 if(value instanceof Date){ //处理日期类型的数据 Date date=(Date) value; String textValue=dateFormat.format(date); cell.setCellValue(textValue); } else if(value instanceof Number ){ //处理数字类型的数据 String textValue=value.toString(); if(textValue.length()>11){ // 长度超过11位,按文本方式写入,防止出现科学计数法的现象。 cell.setCellValue(textValue); }else{ // 如果设置此列为货币金额格式,则格式化此列 if(amounts[colNum]){ cell.setCellStyle(moneyStyle); } // 是数字当作double处理 cell.setCellValue(Double.parseDouble(textValue)); } }else{ // 其它数据类型都当作字符串简单处理 cell.setCellValue(value.toString()); } } catch(Exception e) { log.error("exportXLS error.",e); } } } } } /** * 表格头样式 * @param workbook * @return */ private static HSSFCellStyle getHeadStyle(HSSFWorkbook workbook) { HSSFCellStyle style=workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setLocked(true); //生成一个字体 HSSFFont font=workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 10); font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //把字体应用到当前的样式 style.setFont(font); return style; } /** * 单元格数据样式 * @param workbook * @return */ private static HSSFCellStyle getDataStyle(HSSFWorkbook workbook) { HSSFCellStyle style=workbook.createCellStyle(); // 生成另一个字体 HSSFFont font=workbook.createFont(); font.setColor(HSSFColor.GREY_80_PERCENT.index); font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //把字体应用到当前的样式 style.setFont(font); return style; } /** * 特殊处理金额单元格数据 * @param workbook * @return */ private static HSSFCellStyle getMoneyStyle(HSSFWorkbook workbook) { HSSFCellStyle style=workbook.createCellStyle(); // 设置数据格式样式 HSSFDataFormat df=workbook.createDataFormat(); style.setDataFormat(df.getFormat("###,##0.00")); return style; } }
/** * 后台方式导出Excel */ @SuppressWarnings("static-access") public void exportEexcel(HttpServletResponse response, HttpServletRequest request, String title, String[] headers, List<Object[]> datas, Boolean[] amounts) throws Exception { HSSFWorkbook workbook=ExportXLSUtil.exportExcel("FinanceDatas", headers, datas, amounts); if(workbook==null) { return; } OutputStream out = response.getOutputStream(); try { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); if(StringUtils.isNotBlank(title)){ int viewType = GetSessionUtil.getBrowingType(request); if(1==viewType) { title = URLEncoder.encode(title, "UTF-8"); }else{ title = new String(title.getBytes("UTF-8"), "ISO-8859-1"); } response.setHeader("Content-disposition","attachment; filename="+title+".xls"); }else{ response.setHeader("Content-disposition","attachment; filename=SheetExcel.xls"); } workbook.write(out); response.flushBuffer(); response.setStatus(response.SC_OK); } catch (Exception e) { log.error("exportEexcel error!",e); } finally { out.close(); } }