实现:
获取后台数据,动态生成Excel文件
实现类:
package com.***.convert;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService;
@SuppressWarnings("serial")
public class ToExcel extends ActionSupport {
private UserService service;
public UserService getService() {
return service;
}
public void setService(UserService service) {
this.service = service;
}
public InputStream getExcelFile() throws IOException {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("sheet1");
{
// 创建表头
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell((short) 0);
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
cell.setCellValue("序号");
cell = row.createCell((short) 1);
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
cell.setCellValue("姓");
cell = row.createCell((short) 2);
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
cell.setCellValue("名");
cell = row.createCell((short) 3);
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
cell.setCellValue("年龄");
// 创建数据
SetCellData(sheet,row,cell);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
byte[] ba = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(ba);
return bais;
}
private void SetCellData(HSSFSheet sheet, HSSFRow row, HSSFCell cell) {
// 创建数据
List<User> userList = this.service.findAll();
int i=1;
for (User user : userList) {
row = sheet.createRow(i);
cell = row.createCell((short) 0);
cell.setCellValue(user.getId());
cell = row.createCell((short) 1);
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
cell.setCellValue(user.getFirstname());
cell = row.createCell((short) 2);
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
cell.setCellValue(user.getLastname());
cell = row.createCell((short) 3);
cell.setCellValue(user.getAge());
i++;
}
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
spring配置:
<bean id="downloadAction" class="com.***.convert.ToExcel">
<property name="service" ref="userService"></property>
</bean>
struts配置:
<action name="downFile" class="downloadAction">
<result name="success" type="stream">
<param name="contentType">
application/vnd.ms-excel
</param>
<param name="contentDisposition">
attachment;filename="AllUsers.xls"
</param>
<param name="inputName">excelFile</param>
</result>
</action>