jsp頁面主要代碼:
<span id="export" onclick="window.location.href='${APP_PATH}/export'" >導出</span>
Controller層:
@ResponseBody
@RequestMapping("/export")
public void export(HttpServletRequest request, HttpServletResponse response) {
Encrypt encrypt = new Encrypt();//創建實體類對象
List<Encrypt> encryptList = encryptService.getEncryptDeviceForExcel(encrypt);
ExportExcel<Encrypt> ee= new ExportExcel<Encrypt>();
String[] headers = {對應實體類的字段名,之間用逗號隔開};
String fileName = "導出Excel文件名稱";
ee.exportExcel(headers,encryptList,fileName,response);
}
Service層:
public List<Encrypt> getEncryptDeviceForExcel(Encrypt encrypt);
Service實現類:
@Override
public List<Encrypt> getEncryptDeviceForExcel(Encrypt encrypt) {
List<Encrypt> list = encryptDao.getEncryptDeviceForExcel(encrypt);
return list;
}
Dao層:
public List<Encrypt> getEncryptDeviceForExcel(Encrypt encrypt);
mapper.xml文件就省略了.....就是簡單的查詢所有的語句
導出工具類:
import org.apache.poi.hssf.usermodel.*;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Iterator;
public class ExportExcel<T> {
public void exportExcel(String[] headers,Collection<T> dataset, String fileName,HttpServletResponse response) {
// 聲明一個工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一個表格
HSSFSheet sheet = workbook.createSheet(fileName);
// 設置表格默認列寬度爲15個字節
sheet.setDefaultColumnWidth((short) 20);
// 產生表格標題行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
try {
// 遍歷集合數據,產生數據行
Iterator<T> it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
T t = (T) it.next();
// 利用反射,根據javabean屬性的先後順序,動態調用getXxx()方法得到屬性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName, new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
// 判斷值的類型後進行強制類型轉換
String textValue = null;
// 其它數據類型都當作字符串簡單處理
if(value != null && value != ""){
textValue = value.toString();
}
if (textValue != null) {
HSSFRichTextString richString = new HSSFRichTextString(textValue);
cell.setCellValue(richString);
}
}
}
getExportedFile(workbook, fileName,response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* 方法說明: 指定路徑下生成EXCEL文件
* @return
*/
public void getExportedFile(HSSFWorkbook workbook, String name,HttpServletResponse response) throws Exception {
BufferedOutputStream fos = null;
try {
String fileName = name + ".xls";
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
fos = new BufferedOutputStream(response.getOutputStream());
workbook.write(fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
fos.close();
}
}
}
}