SSM框架將數據庫數據導出爲Excel文件

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();
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章