老大叫我把查询出来的数据用Excel的形式导出来!好在Spring in Action中有这个实例!参看了一阵之后,自己写了一个!
/**
*
*/
package com.skywin.simpass.ui.partner;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
import com.skywin.simpass.db.domain.PartnerTranSum;
/**
* 数据到处到Excel中
*
* @author lixf
* @created on Dec 19th 2008 10:00 AM
*
*/
public class PartnerTransSumListExcelView extends AbstractExcelView {
protected void buildExcelDocument(Map model, HSSFWorkbook wb,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//设置导出格式,导出默认文件名和编码
String contentType = "application nd.ms-excel;charset=UTF-8";
response.setContentType(contentType);
response.setHeader("Content-disposition", "attachment; filename="
+ java.net.URLEncoder.encode("PartnerTransSum.xls", "UTF-8"));
List allPartnerTransSums = (List) model.get("allPartnerTransSums");
HSSFSheet sheet = wb.createSheet("Partner Transaction Summary");
HSSFRow header = sheet.createRow(0);
header.createCell((short) 0).setCellValue("ID");
header.createCell((short) 1).setCellValue("Parnter ID");
header.createCell((short) 2).setCellValue("Transaction Total Quality");
header.createCell((short) 3).setCellValue("Transaction Total Money");
header.createCell((short) 4).setCellValue("Transaction Summary Date");
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
int rowNum = 1;
for (Iterator iter = allPartnerTransSums.iterator(); iter.hasNext();) {
PartnerTranSum pts = (PartnerTranSum) iter.next();
HSSFRow row = sheet.createRow(rowNum++);
row.createCell((short) 0).setCellValue(pts.getPartnerSumId());
row.createCell((short) 1).setCellValue(pts.getPartnerId());
row.createCell((short) 2).setCellValue(pts.getTransQuantity());
row.createCell((short) 3).setCellValue(pts.getSum());
row.createCell((short) 4).setCellValue(pts.getSumDate());
row.getCell((short) 4).setCellStyle(cellStyle);
}
HSSFRow row = sheet.createRow(rowNum);
row.createCell((short) 0).setCellValue("TOTAL:");
String formula = "SUM(F2:F" + rowNum + ")";
row.createCell((short) 5).setCellFormula(formula);
}
}
AbstractExcelView是Spring视图导出里面封装好了的一个类:继承它,然后重写buildExcelDocument方法即可!
控制器方法:
public ModelAndView partnerTransSumExport(HttpServletRequest request,
HttpServletResponse response) throws Exception {
List allPartnerTransSums = (List) request.getSession().getAttribute(
"allPartnerTransSums");
return new ModelAndView(documentView, "allPartnerTransSums",
allPartnerTransSums);
}
配置文件:
<!-- Excel View -->
<bean id="excelView"
class="com.skywin.simpass.ui.partner.PartnerTransSumListExcelView" />
<bean id="partnerTransSumController"
class="com.skywin.simpass.ui.partner.PartnerTransSumController"
scope="prototype">
<property name="methodNameResolver">
<ref bean="paraMethodResolver" />
</property>
<property name="partnerTransSumService">
<ref bean="partnerTransSumManager" />
</property>
<property name="documentView">
<ref bean="excelView"/>
</property>
</bean>