簡單完成Excel導出

Excel的導出只須要三步便可完成:

1,完成excel的工具類編寫,直接複製便可

package cn.com.bcl.util;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


public class ExcelUtil {

    /**
     * 導出Excel
     * @param sheetName sheet名稱
     * @param title 標題
     * @param list 內容
     * @param wb HSSFWorkbook對象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,List<String[]>list, HSSFWorkbook wb){

        // 第一步,建立一個HSSFWorkbook,對應一個Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }

        // 第二步,在workbook中添加一個sheet,對應Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);

        // 第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制
        HSSFRow row = sheet.createRow(0);

        // 第四步,建立單元格,並設置值表頭 設置表頭居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 建立一個居中格式

        //聲明列對象
        HSSFCell cell = null;

        //建立標題
        for(int i=0;i<title.length;i++){
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }

        //建立內容
        for(int i=0;i<list.size();i++){
            row = sheet.createRow(i + 1);
            for(int j=0;j<list.get(i).length;j++){
                //將內容按順序賦給對應的列對象
                row.createCell(j).setCellValue(list.get(i)[j]);
            }
        }
        return wb;
    }
}

2,業務邏輯代碼

@Controller
@RequestMapping(value = "/channellog")
public class ChannelLogController extends BaseController {

  @Resource(name = "channelLogService")
  private ChannelLogService channelLogService;

    /**
     * 導出excel
     * 
     * @param page
     * @throws Exception
     */
    @RequestMapping(value = "/exportExcel")
    public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
        logBefore(logger, Jurisdiction.getUsername() + "列表channelLog");
      
        List<Map<String, Object>> varList = channelLogService.dataList(); // 列出channel_log列表

        String fileName = "操做日誌" + System.currentTimeMillis() + ".xls";
        String sheetName = "操做日誌";
        String[] title = new String[] { "序號", "影廳", "操做內容", "通道號", "開始時間", "使用時長(分鐘)" };
     //內容封裝
        List<String[]> contents = new ArrayList<>();
        for (int i = 0; i < varList.size(); i++) {
            String[] str = new String[title.length];
            Map<String, Object> map = varList.get(i);
            str[0] = String.valueOf(i+1);
            str[1] = String.valueOf(map.get("hallName"));
            str[2] = String.valueOf(map.get("oprationName"));
            str[3] = String.valueOf(map.get("channelNo"));
            str[4] = String.valueOf(map.get("startTime"));
            str[5] = String.valueOf(map.get("useTime") == null ? "" : map.get("useTime"));
            contents.add(str);
        }
        // 建立HSSFWorkbook
        HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, contents, null);
        try {
            this.setResponseHeader(response, fileName);
            OutputStream os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();
            wb.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    // 發送響應流方法
    private void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName+"\"");
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

  在這一步也只須要完成:a>查詢出結果集;b>對結果集進行封裝爲指定的格式便可java

3,js頁面須要注意的點

$("#exportExcel").click(function(){
    $("#Form").attr("action", "channellog/exportExcel.do");
    $("#Form").submit();
})

 導出結果展現:

相關文章
相關標籤/搜索