xuekang
2024-05-11 bac0878349a1db23e7b420ea164e22fb9db73a99
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
package com.nuvole.util;
// @formatter:off
import jakarta.servlet.http.HttpServletResponse;import lombok.val;import org.apache.poi.hssf.usermodel.*;
import java.net.URLEncoder;import java.util.Date;import java.util.List;import java.util.Locale; /**
 *                .-~~~~~~~~~-._       _.-~~~~~~~~~-.
 *            __.'  @Author     ~.   .~    代码无Bug   `.__
 *          .'//     liu.q        \./       (秘籍)      \\`.
 *        .'// [916000612@qq.com]  |   欲练神功   引刀自宫  \\`.
 *      .'// .-~"""""""~~~~-._     |    _,-~~~~"""""""~-.  \\`.
 *    .'//.-"  2019-07-17     `-.  |  .-'     16:54       "-.\\`.
 *  .'//______.============-..   \ | /   ..-============.______\\`.
 *.'______________________________\|/______________________________`.
 *
 * @Description :
 */
// @formatter:on
 
public class ExportExcel {
    public static void exportExcel(String fileName, List<String> titles, List<List<Object>> rows, HttpServletResponse response) throws Exception {
 
        // 声明一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成一个表格
        HSSFSheet sheet = workbook.createSheet();
        // 设置表格默认列宽度为15个字节
        sheet.setDefaultColumnWidth((short) 18);
 
        //设置标题
        HSSFRow title = sheet.createRow(0);
        for (int i = 0; i < titles.size(); i++) {
            HSSFCell cell = title.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(titles.get(i));
            cell.setCellValue(text);
        }
 
        //设置数据
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        for (int i = 0; i < rows.size(); i++) {
            HSSFRow row = sheet.createRow(i + 1);
            List<Object> clo = rows.get(i);
            int index = 0;
            for (Object o : clo) {
                HSSFCell cell = row.createCell(index);
                if (o instanceof Date) {
                    HSSFDataFormat format = workbook.createDataFormat();
                    cellStyle.setDataFormat(format.getFormat("yyyy-mm-dd HH:mm:ss"));
                    cell.setCellStyle(cellStyle);
                    cell.setCellValue((Date) o);
                } else if (o instanceof Double) {
                    HSSFDataFormat format = workbook.createDataFormat();
                    cellStyle.setDataFormat(format.getFormat("#,##0.00"));
                    cell.setCellStyle(cellStyle);
                    cell.setCellValue(Double.valueOf(o.toString()));
                } else {
                    HSSFDataFormat format = workbook.createDataFormat();
                    cellStyle.setDataFormat(format.getFormat("@"));
                    cell.setCellStyle(cellStyle);
                    cell.setCellValue(o.toString());
                }
                index++;
            }
        }
        // 告诉浏览器用什么软件可以打开此文件
        response.setHeader("content-Type", "application/vnd.ms-excel");
 
        //解决 苹果浏览器乱码问题
        val ua = CommonUtil.getRequest().getHeader("User-Agent").toLowerCase(Locale.ENGLISH);
        if (ua.indexOf("macintosh") > -1 && ua.indexOf("chrome") < 0) {
            fileName = new String(fileName.getBytes(), "iso8859-1");
        } else {
            fileName = URLEncoder.encode(fileName, "utf-8");
        }
 
        // 下载文件的默认名称
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        response.flushBuffer();
        workbook.write(response.getOutputStream());
    }
}