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();
}
}