ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用HSSFWorkbook导出Excel表格

2019-05-13 21:03:03  阅读:353  来源: 互联网

标签:Excel 表格 columnHeadStyle HSSFWorkbook cell import new HSSFRichTextString setCell


使用HSSFWorkbook导出Excel表格
一、加依赖或者导入jar包
去https://mvnrepository.com下载Apache POI
这里使用的3.9
二、上代码

/**
     * 
     * <li>action控制层</li>
     * @param req
     * @param resp
     * @throws Exception
     */
    public void ExcelOut(HttpServletRequest req, HttpServletResponse resp) throws Exception{
        // TODO Auto-generated method stub
        List<Emp> selectAll = empService.selectAll();//从数据库查询出想要的数据
        ExportExcelUtil.exportExcelBook(req, resp, selectAll);//进行EXCEL表格的绘制以及传输
    }

这里我把它作为工具类,感觉有点不妥

package com.test.utils;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLDecoder;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

import com.test.pojo.Emp;

public class ExportExcelUtil {
    /*
        HSSFWorkbook:excel的工作簿
        HSSFSheet:excel的工作表
        HSSFRow:excel的行
        HSSFCell:excel的单元格
        HSSFFont:excel字体
        HSSFDataFormat:日期格式
        HSSFHeader:sheet头
        样式:
        HSSFCellStyle:单元格样式
        一个Excel的文件对应一个工作簿(HSSFWorkbook),
        一个工作簿可以有多个工作表(我们通常看到的Sheet0、Sheet1)(HSSFSheet)组成,
        一个工作表是由多行(HSSFRow)组成,
        一行又是由多个单元格(HSSFCell)组成。
*/
     /**
     * 导出数据生成EXCEL方法
     * @param request
     * @param response
     * @param list
     * @throws IOException
     */
    public static void exportExcelBook(HttpServletRequest request, HttpServletResponse response,List<Emp> list)
            throws IOException {
        if (list == null) {
            return;
        }
        //文件名称,客户端传来的参数,防止中文文件名乱码参数编码因此这里需要解码
        String fileName = URLDecoder.decode(request.getParameter("fileName"),"UTF-8");
        //创建Excel工作薄对象
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建Excel工作表对象
        HSSFSheet sheet = workbook.createSheet();
        //有多少栏(列)就要设置多少,格式 sheet.setColumnWidth(列号,宽)
        sheet.setColumnWidth(0, 3000);
        sheet.setColumnWidth(1, 5000);
        sheet.setColumnWidth(2, 4000);
        sheet.setColumnWidth(3, 2500);
        sheet.setColumnWidth(4, 3000);
        sheet.setColumnWidth(5, 6000);
        sheet.setColumnWidth(6, 6000);

        // 设置表头字体样式
        HSSFFont columnHeadFont = workbook.createFont();
        columnHeadFont.setFontName("宋体");
        columnHeadFont.setFontHeightInPoints((short) 10);
        columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

        // 列头的样式
        HSSFCellStyle columnHeadStyle = workbook.createCellStyle();
        columnHeadStyle.setFont(columnHeadFont);
        // 左右居中
        columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 上下居中
        columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        columnHeadStyle.setLocked(true);
        columnHeadStyle.setWrapText(true);
        // 左边框的颜色
        columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);
        // 边框的大小
        columnHeadStyle.setBorderLeft((short) 1);
        // 右边框的颜色
        columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);
        // 边框的大小
        columnHeadStyle.setBorderRight((short) 1);
        // 设置单元格的边框为粗体
        columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        // 设置单元格的边框颜色
        columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index);
        // 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式)
        columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index);
        // 设置普通单元格字体样式
        HSSFFont font = workbook.createFont();
        font.setFontName("宋体");
        font.setFontHeightInPoints((short) 10);

        //创建Excel工作表第一行
        HSSFRow row0 = sheet.createRow(0);
        // 设置行高
        row0.setHeight((short) 750);
        HSSFCell cell = row0.createCell(0);
        //设置单元格内容
        cell.setCellValue(new HSSFRichTextString("雇员编号"));
        //设置单元格字体样式
        cell.setCellStyle(columnHeadStyle);
        cell = row0.createCell(1);
        cell.setCellValue(new HSSFRichTextString("姓名"));
        cell.setCellStyle(columnHeadStyle);
        cell = row0.createCell(2);
        cell.setCellValue(new HSSFRichTextString("工作"));
        cell.setCellStyle(columnHeadStyle);
        cell = row0.createCell(3);
        cell.setCellValue(new HSSFRichTextString("上级编号"));
        cell.setCellStyle(columnHeadStyle);
        cell = row0.createCell(4);
        cell.setCellValue(new HSSFRichTextString("工资"));
        cell.setCellStyle(columnHeadStyle);
        cell = row0.createCell(5);
        cell.setCellValue(new HSSFRichTextString("奖金"));
        cell.setCellStyle(columnHeadStyle);
        cell = row0.createCell(6);
        cell.setCellValue(new HSSFRichTextString("部门编号"));
        cell.setCellStyle(columnHeadStyle);

        // 循环写入数据
        for (int i = 0; i < list.size(); i++) {
            Emp emp = list.get(i);
            //第一行以此类推
            HSSFRow row = sheet.createRow(i + 1);
            
            //第一个单元格,以此类推
            cell = row.createCell(0);
            cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getEmpno())));
            cell.setCellStyle(columnHeadStyle);
            
            cell = row.createCell(1);
            cell.setCellValue(new HSSFRichTextString(emp.getEname()));
            cell.setCellStyle(columnHeadStyle);
            
            cell = row.createCell(2);
            cell.setCellValue(new HSSFRichTextString(emp.getJob()));
            cell.setCellStyle(columnHeadStyle);
            
            cell = row.createCell(3);
            cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getMgr())));
            cell.setCellStyle(columnHeadStyle);
            
            cell = row.createCell(4);
            cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getSal())));
            cell.setCellStyle(columnHeadStyle);
            
            cell = row.createCell(5);
            cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getComm())));
            cell.setCellStyle(columnHeadStyle);
            
            cell = row.createCell(6);
            cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getDeptno())));
            cell.setCellStyle(columnHeadStyle);
//            cell.setCellValue(new HSSFRichTextString(DateUtils.DateToString(stu.getCreate_time(), "yyyy-MM-dd HH:mm:ss")));
        }
        // 获取输出流
        OutputStream os = response.getOutputStream();
        // 重置输出流
        response.reset();
        
        
        // 设定输出文件头
        //Content-Disposition属性有两种类型:inline 和 attachment 
        //inline :将文件内容直接显示在页面
        //attachment:弹出对话框让用户下载
        response.setHeader("Content-disposition",
                "attachment; filename=" + new String(fileName.getBytes("GB2312"), "8859_1") + ".xls");
        // 定义输出类型,定义
        response.setContentType("application/msexcel");
        workbook.write(os);
        os.close();
        return;
    }
}

前端简单处理了

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<base  href="/TestDemo/">
</head>
<body>
  <a href="javascript:void(0)" onclick="outExcel()">导出雇员表</a>
      <script>
        function outExcel(){
            var fileName ="雇员信息表";
            //编码防止中文字符乱码
            window.location.href=encodeURI("empout/ExcelOut?fileName="+encodeURIComponent(fileName));
        }
      </script>
</body>
</html>

标签:Excel,表格,columnHeadStyle,HSSFWorkbook,cell,import,new,HSSFRichTextString,setCell
来源: https://www.cnblogs.com/zhangsonglin/p/10858949.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有