简单完成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>对结果集进行封装为指定的格式即可

3,js页面需要注意的点

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

 导出结果展示:

 

posted @   MXC肖某某  阅读(475)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示