數據庫數據生成Excel表格(多用在導出數據)


  最近在項目開發中遇到這樣一個需求,用戶聊天模塊產品要求記錄用戶聊天信息,但只保存當天的,每天都要刷新清空數據,但聊天記錄要以Excel的形式打印出來,於是就引出了將數據庫的數據導出成Excel表格的需求。直奔主題。

  在java中其實已經有了封裝好的jar包,我們這里只要導入相應的jar包即可,具體如下(忘了是那幾個了,所以就全截圖了=_=)

      

  然后就是工具類,代碼如下:

  

import java.io.BufferedOutputStream;  
import java.lang.reflect.Field;  
import java.lang.reflect.Method;  
import java.util.Collection;  
import java.util.Iterator;  

import javax.servlet.http.HttpServletResponse;  

import org.apache.poi.xssf.usermodel.XSSFCell;  
import org.apache.poi.xssf.usermodel.XSSFRichTextString;  
import org.apache.poi.xssf.usermodel.XSSFRow;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  

public class ExportExcelUtil<T> {
    
    public void exportExcel(String[] headers,Collection<T> dataset, String fileName,HttpServletResponse response) {  
        // 聲明一個工作薄  
        XSSFWorkbook workbook = new XSSFWorkbook();  
        // 生成一個表格  
        XSSFSheet sheet = workbook.createSheet(fileName);  
        // 設置表格默認列寬度為15個字節  
        sheet.setDefaultColumnWidth((short) 20);  
        // 產生表格標題行  
        XSSFRow row = sheet.createRow(0);  
        for (short i = 0; i < headers.length; i++) {  
            XSSFCell cell = row.createCell(i);  
            XSSFRichTextString text = new XSSFRichTextString(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++) {  
                    XSSFCell 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) {  
                        XSSFRichTextString richString = new XSSFRichTextString(textValue);  
                        cell.setCellValue(richString);  
                    }  
                }  
            }  
            getExportedFile(workbook, fileName,response);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }   
    }  
      
    /** 
     *  
     * 方法說明: 指定路徑下生成EXCEL文件 
     * @return 
     */  
    public void getExportedFile(XSSFWorkbook workbook, String name,HttpServletResponse response) throws Exception {  
        BufferedOutputStream fos = null;  
        try {  
            String fileName = name + ".xlsx";  
            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();  
            }  
        }  
    }  
  
}  

  在使用時,調用如下:(我這里是使用的springMVC,所以直接寫在了接口中,為了省事就全部截取了~_~)

    /**
     * 導出數據庫
     * @param response
     */
    @RequestMapping(value="exportExcel.do",method=RequestMethod.GET,
            produces="application/json;charset=utf-8")
    @ResponseBody
    public void exportExcel(HttpServletResponse response){
        Map<String, Object> map = new HashMap<String, Object>();
        map = msgService.findAllMsg();
        List<Msg> msgList = (List<Msg>) map.get("data");
        ExportExcelUtil<Msg> ee= new ExportExcelUtil<Msg>();
        String[] headers = { "序號", "發送用戶", "接收用戶", "時間" ,"聊天信息"};  
        String fileName = "用戶聊天信息表";  
        ee.exportExcel(headers,msgList,fileName,response); 
    }

至此,將數據庫信息導出成Excel表格的功能就實現了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM