zoukankan      html  css  js  c++  java
  • Java_导出Excel

    导出的Excel标题、Sheet名称、数据内容都可以使用中文​


    一、pom.xml引入jar包

    1
    2
    3
    4
    5
    <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.13</version>
            </dependency>


    二、Excel操作内部类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.*;
     
    public class ExportInternalUtil {
        private XSSFWorkbook wb = null;
     
        private XSSFSheet sheet = null;
     
        /**
         * @param wb
         * @param sheet
         */
        public ExportInternalUtil(XSSFWorkbook wb, XSSFSheet sheet) {
            this.wb = wb;
            this.sheet = sheet;
        }
     
        /**
         * 合并单元格后给合并后的单元格加边框
         *
         * @param region
         * @param cs
         */
        public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) {
     
            int toprowNum = region.getFirstRow();
            for (int i = toprowNum; i <= region.getLastRow(); i++) {
                XSSFRow row = sheet.getRow(i);
                for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
                    XSSFCell cell = row.getCell(j);// XSSFCellUtil.getCell(row,
                                                    // (short) j);
                    cell.setCellStyle(cs);
                }
            }
        }
     
        /**
         * 设置表头的单元格样式
         *
         * @return
         */
        public XSSFCellStyle getHeadStyle() {
            // 创建单元格样式
            XSSFCellStyle cellStyle = wb.createCellStyle();
            // 设置单元格的背景颜色为淡蓝色
            cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
            cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            // 设置单元格居中对齐
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            // 设置单元格垂直居中对齐
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            // 创建单元格内容显示不下时自动换行
            cellStyle.setWrapText(true);
            // 设置单元格字体样式
            XSSFFont font = wb.createFont();
            // 设置字体加粗
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
            font.setFontName("宋体");
            font.setFontHeight((short) 200);
            cellStyle.setFont(font);
            // 设置单元格边框为细线条
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
            return cellStyle;
        }
     
        /**
         * 设置表体的单元格样式
         *
         * @return
         */
        public XSSFCellStyle getBodyStyle() {
            // 创建单元格样式
            XSSFCellStyle cellStyle = wb.createCellStyle();
            // 设置单元格居中对齐
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            // 设置单元格垂直居中对齐
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            // 创建单元格内容显示不下时自动换行
            cellStyle.setWrapText(true);
            // 设置单元格字体样式
            XSSFFont font = wb.createFont();
            // 设置字体加粗
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
            font.setFontName("宋体");
            font.setFontHeight((short) 200);
            cellStyle.setFont(font);
            // 设置单元格边框为细线条
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
            return cellStyle;
        }
    }


    三、Excel操作类

           共外部调用,可设置Sheet名称、标题、数据等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    import java.io.IOException;
    import java.util.ArrayList;
     
    import javax.servlet.ServletOutputStream;
     
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    import com.james.domain.User;
     
    public class ExportUtil {
     
        public static void ExportExcel(String[] titles, ArrayList<User> list, ServletOutputStream outputStream) {
            // 创建一个workbook 对应一个excel应用文件
            XSSFWorkbook workBook = new XSSFWorkbook();
            // 在workbook中添加一个sheet,对应Excel文件中的sheet
            //Sheet名称,可以自定义中文名称
            XSSFSheet sheet = workBook.createSheet("Sheet1");
            ExportInternalUtil exportUtil = new ExportInternalUtil(workBook, sheet);
            XSSFCellStyle headStyle = exportUtil.getHeadStyle();
            XSSFCellStyle bodyStyle = exportUtil.getBodyStyle();
            // 构建表头
            XSSFRow headRow = sheet.createRow(0);
            XSSFCell cell = null;
     
            // 输出标题
            for (int i = 0; i < titles.length; i++) {
                cell = headRow.createCell(i);
                cell.setCellStyle(headStyle);
                cell.setCellValue(titles[i]);
            }
            // 构建表体数据
            for (int j = 0; j < list.size(); j++) {
                XSSFRow bodyRow = sheet.createRow(j + 1);
                User user = list.get(j);
     
                cell = bodyRow.createCell(0);
                cell.setCellStyle(bodyStyle);
                cell.setCellValue(user.getLastIp());
     
                cell = bodyRow.createCell(1);
                cell.setCellStyle(bodyStyle);
                cell.setCellValue(user.getLastVisit());
     
                cell = bodyRow.createCell(2);
                cell.setCellStyle(bodyStyle);
                cell.setCellValue(user.getPassword());
                 
                cell = bodyRow.createCell(3);
                cell.setCellStyle(bodyStyle);
                cell.setCellValue(user.getUserName());
                 
                cell = bodyRow.createCell(4);
                cell.setCellStyle(bodyStyle);
                cell.setCellValue(user.getUserId());
            }
     
            try {
                workBook.write(outputStream);
                outputStream.flush();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    四、SpringMVC Controller层调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    @RequestMapping(value = "/excelDownload")
        public String exportExcel(HttpServletResponse response) {
            try {
                //String fileName = new String(("导出excel标题").getBytes(), "UTF-8") + ".xlsx";
                String fileName=new String(("导出excel标题").getBytes("gb2312"), "iso8859-1")+ ".xlsx";
                response.setContentType("application/vnd.ms-excel;charset=UTF-8");
                response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
                response.setCharacterEncoding("utf-8");
     
                // response.setHeader("Content-disposition", "attachment; filename="
                // + "exdddcel" + ".xlsx");// 组装附件名称和格式
     
                String[] titles = { "最后IP", "最后访问时间", "密码", "用户名", "用户编号" };
     
                /*SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String date = df.format(new Date());
                Date dateNow = null;
                try {
                    dateNow = df.parse(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }*/
                Date dateNow = new Date();
                 
                ArrayList<User> users = new ArrayList<User>();
                User user = new User();
                user.setLastIp("127.0.0.1");
                user.setLastVisit(dateNow);
                user.setPassword("123");
                user.setUserId(1);
                user.setUserName("名称:James");
                users.add(user);
     
                user = new User();
                user.setLastIp("192.0.0.1");
                user.setLastVisit(dateNow);
                user.setPassword("456");
                user.setUserId(2);
                user.setUserName("名称:Mary");
                users.add(user);
     
                ServletOutputStream outputStream = response.getOutputStream();
                ExportUtil.ExportExcel(titles, users, outputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }


    五、程序中用到的实体类User

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import java.io.Serializable;
    import java.util.Date;
     
    public class User implements Serializable {
        private int userId;
     
        private String userName;
     
        private String password;
     
        private String lastIp;
     
        private Date lastVisit;
     
        public int getUserId() {
            return userId;
        }
     
        public void setUserId(int userId) {
            this.userId = userId;
        }
     
        public String getUserName() {
            return userName;
        }
     
        public void setUserName(String userName) {
            this.userName = userName;
        }
     
        public String getPassword() {
            return password;
        }
     
        public void setPassword(String password) {
            this.password = password;
        }
     
        public String getLastIp() {
            return lastIp;
        }
     
        public void setLastIp(String lastIp) {
            this.lastIp = lastIp;
        }
     
        public Date getLastVisit() {
            return lastVisit;
        }
     
        public void setLastVisit(Date lastVisit) {
            this.lastVisit = lastVisit;
        }
    }


    六、异常情况

    1、标题乱码(注释代码会出现标题乱码)

    1
    2
    //String fileName = new String(("导出excel标题").getBytes(), "UTF-8") + ".xlsx";
                String fileName=new String(("导出excel标题").getBytes("gb2312"), "iso8859-1")+ ".xlsx";


    七、参考文档

    1、http://webook-java.iteye.com/blog/1699621

    2、http://www.cnblogs.com/yjmyzz/p/4206463.html








  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/gossip/p/5218029.html
Copyright © 2011-2022 走看看