package com.hynt.project.util.excel;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.ss.util.Region;
public class ExcelServiceImpl implements ExcelService {
private int rowSize;
public int getRowSize() {
return rowSize;
}
public void setRowSize(int rowSize) {
this.rowSize = rowSize;
}
public void toExcel(Map<String, Object> data) throws Exception {
String title = (String)data.get("title");
String[] headers = (String[])data.get("headers");
List<Object[]> rows = (List<Object[]>)data.get("rows");
String filePath = (String)data.get("filePath");
String sheetName = (String)data.get("sheetName");
// 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = null;
int index = 1;//工作表序号
HSSFRow row = null;//工作表行
HSSFCell cell = null;//工作表列
int rowIndex = 0;//工作表行号
Object[] rowdata = null;//数据行
for(int i=0;i<rows.size();i++){
if(i%rowSize == 0){
sheet = wb.createSheet(sheetName +"_"+ (index++));
rowIndex = 0;
}
if(rowIndex == 0){//创建标题
row = sheet.createRow(rowIndex);
cell = row.createCell(0);
cell.setCellValue(title);
sheet.addMergedRegion(new Region(0, (short)0, 0, (short)(headers.length-1)));
rowIndex ++ ;
}
if(rowIndex == 1){//创建列名
row = sheet.createRow(rowIndex);
for(int j=0;j<headers.length;j++){
cell = row.createCell(j);
cell.setCellValue(headers[j]);
}
rowIndex ++ ;
}
//写入数据行
rowdata = rows.get(i);
row = sheet.createRow(rowIndex);
for(int k = 0;k<rowdata.length;k++){
cell = row.createCell(k);
cell.setCellValue((String)rowdata[k]);
}
rowIndex++ ;
}
// 最后,将文件存到指定位置
try
{
FileOutputStream fout = new FileOutputStream(filePath);
wb.write(fout);
fout.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
测试:
public void toExcel(ServletContextEvent event){
Map<String,Object> data = new HashMap<String, Object>();
data.put("title", "学生基本信息表");
data.put("headers", new String[]{"学号","姓名","班级","自我介绍","性别","爱好","备注"});
data.put("filePath", "d:\\stu.xls");
data.put("sheetName", "学生");
List<Object[]> rows = new ArrayList<Object[]>();
Object[] row = null;
for(int i = 0;i<200000;i++){
row = new Object[7];
row[0] = new String("1000"+i);
row[1] = new String("蓉"+i);
row[2] = new String("就发飞机分付金额飞机二纺机二姐夫金额付金额分付金额付金额"+i);
row[3] = new String("飞机分块减肥额咖啡金额咖啡机额看风景而非吉尔克分进风口付金额客服吉尔克复健科佳蓉"+i);
row[4] = new String("菲菲将飞机飞额看风景额咖啡金额咖啡机额看风景额看风景儿科付金额客服就额客服戒咖啡将额看风景额看风景儿科付金额开付金额开付金额佳蓉"+i);
row[5] = new String("汤风景妇科飞机额看风景儿科付金额客服额块减肥额块减肥额块减肥儿科监控 蓉"+i);
row[6] = new String("阿飞affect分解符科技法额付金额咖啡金额疯狂饥饿疯狂饥饿付金额开付金额看飞机额咖啡金额咖啡机额咖啡金额咖啡机额客服额块减肥额看风景佳蓉"+i);
rows.add(row);
}
data.put("rows", rows);
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext());
ExcelService excelService = (ExcelService)ctx.getBean("excelService");
try {
excelService.toExcel(data);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("excel导出失败!");
}
}