2019独角兽企业重金招聘Python工程师标准>>>

添加maven依赖:

<!-- poi -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17-beta1</version>
</dependency><!-- fast json -->
<dependency> <groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.31</version>
</dependency>

主要代码:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.liyang.entity.UserEntity;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;/**
 * 导出excel工具
 *
 * @author 李阳
 * @mail ly_triangle@126.com
 * 15002992382
 * 2017-07-24
 */
public class ExcelUtil {/**
     * 根据给定的数据在前端页面导出excel
     *
     * @param fileName 文件名
 * @param wb 工作簿
     * @param response
     * @throws IOException
     */
    public static void exportDatasExcel(String fileName, Workbook wb, HttpServletResponse response) throws IOException {        //清空前端缓存
        response.reset();         //指定前端文件mime类型  response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-Disposition", "attachment;fileName="+ new String(replaceSpecialChars(fileName).getBytes(), "iso8859-1")+ ".xlsx");//字节数组输出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();//将工作簿写进字节数组输出流中
        wb.write(out);//创建字节数组输入流,将输出流中的数据写进该输入流中,最后创建输入流的缓冲流,便于读取数据
        BufferedInputStream bufferIn = new BufferedInputStream(new ByteArrayInputStream(out.toByteArray()));//获得response输出流,并获得输出流的缓冲流,便于写入数据
        BufferedOutputStream bufferOut = new BufferedOutputStream(response.getOutputStream());//每次输出文件1000字节长度数据到输出流
        byte[] buffer = new byte[1000];int bytesRead;//读取输入缓冲流中的数据,经过缓冲输出流发送给前端下载
        while (-1 != (bytesRead = bufferIn.read(buffer))) {bufferOut.write(buffer, 0, bytesRead);}bufferOut.flush();bufferIn.close();bufferOut.close();}/**
     * 创建excel表格(记录性结果)
     *
     * @param titles  标题集合
     * @param keys    key值集合,用于读取json对象中的数据
     * @param objects 数据对象集合
     * @return
     */
    private static Workbook buildWorkbook(List<String> titles, List<String> keys, List<Object> objects, String fileName) {//创建工作簿
        Workbook wb = new XSSFWorkbook();  //or new HSSFWorkbook();

        //创建表格
        Sheet sheet = wb.createSheet(replaceSpecialChars(fileName));//第一行
        Row row = sheet.createRow(0);//第二行
        Row row1 = sheet.createRow(1);//创建数据单元格样式       CellStyle style = creatStyle(wb);//创建标题单元格样式CellStyle titleStyle = creatTitleStyle(wb);Cell cell;Cell cell1;//遍历标题,标题占两行
        for (int t = 0; t < titles.size(); t++) {//创建标题单元格并设置标题单元格的值
            cell = row.createCell(t);cell.setCellValue(titles.get(t));//创建第二行单元格
            cell1 = row1.createCell(t);//合并上下单元格(标题占两行)
            sheet.addMergedRegion(new CellRangeAddress(0, 1, t, t));//对单元格使用样式
            cell.setCellStyle(titleStyle );cell1.setCellStyle(titleStyle );}//将对象集合转换成json对象数组
        JSONArray array = JSON.parseArray(JSON.toJSONString(objects));//遍历json对象数组,将数据写进excel        for (int r = 2; r < array.size() + 2; r++) {JSONObject o = array.getJSONObject(r - 2);//创建行
            row = sheet.createRow(r);//创建行单元格,并赋值
            for (int c = 0; c < keys.size(); c++) {String value = o.get(keys.get(c)) == null ? "" : o.get(keys.get(c)).toString();cell = row.createCell(c);cell.setCellValue(value);cell.setCellStyle(style);}}// 最后一列宽自适应sheet.autoSizeColumn(titles.size()-1);//获得工作簿
        return wb;}

创建复杂excel表格(非记录性数据,需要一定模板):

/**
 * 动态生成复杂excel
 *
 * @param rowSize    行数
 * @param columnSize 列数
 * @param models     单元格实例集合(每一个单元格(包括合并的单元格)起止行列四个索引和单元格的值)
 * @param fileName   文件名
 * @return
 */
public static Workbook buildWorkbook2(Integer rowSize, Integer columnSize, List<CellModel> models, String fileName) {Workbook wb = new XSSFWorkbook();Sheet sheet = wb.createSheet(replaceSpecialChars(fileName));CellStyle style = creatStyle(wb);CellStyle titleStyle = creatTitleStyle(wb);Row row;Cell cell;//创建空表格
    for (int r = 0; r < rowSize; r++) {row = sheet.createRow(r);for (int c = 0; c < columnSize; c++) {cell = row.createCell(c);if (0 == r || 1 == r) {cell.setCellStyle(titleStyle);} else {cell.setCellStyle(style);}}}//单元格赋值并合并单元格
    models.forEach(c -> {Integer rowBegin = c.getRowBegin();Integer rowEnd = c.getRowEnd();Integer columnBegin = c.getColumnBegin();Integer columnEnd = c.getColumnEnd();sheet.getRow(rowBegin).getCell(columnBegin).setCellValue(c.getValue().toString());if (rowBegin.intValue() != rowEnd.intValue() || columnBegin.intValue() != columnEnd.intValue())sheet.addMergedRegion(new CellRangeAddress(rowBegin, rowEnd, columnBegin, columnEnd));});short height = sheet.getDefaultRowHeight();sheet.setDefaultRowHeight((short) (height * 1.7));sheet.setDefaultColumnWidth(15);return wb;
}

单元格对象:

public class CellModel {private Object value = ""; //单元格值
    private Integer rowBegin; //开始行索引
    private Integer rowEnd;  //结束行索引
    private Integer columnBegin;  //开始列索引
    private Integer columnEnd;  //结束列索引.....略

创建标题样式:

/**
 * create title style
 * @param wb
 * @return
 */
private static CellStyle creatTitleStyle(Workbook wb) {Font font = wb.createFont();font.setFontHeightInPoints((short) 12);font.setFontName("黑体");font.setBold(true);CellStyle titleStyle = wb.createCellStyle();titleStyle.setAlignment(HorizontalAlignment.CENTER);titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);titleStyle.setBorderTop(BorderStyle.THIN);titleStyle.setBorderBottom(BorderStyle.THIN);titleStyle.setBorderLeft(BorderStyle.THIN);titleStyle.setBorderRight(BorderStyle.THIN);//背景色titleStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SEA_GREEN.getIndex());titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);titleStyle.setFont(font);return titleStyle;
}

创建数据样式:

private static CellStyle creatStyle(Workbook wb) {Font font = wb.createFont();//字号font.setFontHeightInPoints((short) 12);//字体font.setFontName("宋体");   //斜体//font.setItalic(true);//加粗//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//创建样式CellStyle style = wb.createCellStyle();// 给样式指定字体style.setFont(font);//纵横向居中style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);//四周边框style.setBorderTop(BorderStyle.THIN);style.setBorderBottom(BorderStyle.THIN);style.setBorderLeft(BorderStyle.THIN);style.setBorderRight(BorderStyle.THIN);return style;
}

文件名特殊字符处理(特殊字符统一用空格替换)

private static String replaceSpecialChars(String fileName) {return fileName.replaceAll(":", " ").replaceAll(":", " ").replaceAll("?", " ").replaceAll("\\?", " ").replaceAll("\\*", " ").replaceAll("]", " ").replaceAll("\\[", " ").replaceAll("“", " ").replaceAll("”", " ").replaceAll("\"", " ").replaceAll("\\|", " ").replaceAll(">", " ").replaceAll("<", " ").replaceAll("\\\\", " ").replaceAll("/", " ");
}

测试1(记录性结果):

/*** test
     */
    public static void main(String[] args) throws IOException {//构造数据对象集合
        List list = Arrays.asList(new UserEntity("kevin", "lee", 5),new UserEntity("david", "lee", null),new UserEntity("kavin", "", 6),new UserEntity("kavein", "lee", 65));//构造标题和key值列表,生成工作簿
        Workbook wb = buildWorkbook(Arrays.asList("姓名", "全名", "年龄"),Arrays.asList("stageName", "fullName", "sex"), list);//生成服务器本地文件,如需输出到前端,只需要调用exportDatasExcel方法即可
        FileOutputStream fileOut = new FileOutputStream("dataExcel.xlsx");wb.write(fileOut);fileOut.close();wb.close();}

测试2(复杂结果):

public static void main(String[] args) throws IOException {//构造数据对象集合
    List list = new ArrayList();list.add(new CellModel("标题", 0, 1, 0, 3));
    list.add(new CellModel("购买渠道", 2, 26, 0, 0));list.add(new CellModel("微信", 2, 13, 1, 1));list.add(new CellModel("网站", 14, 26, 1, 1));
    list.add(new CellModel("微信平台名称", 2, 3, 2, 3));list.add(new CellModel("大秦帝国", 4, 13, 2, 3));list.add(new CellModel("网站平台名称", 14, 15, 2, 3));list.add(new CellModel("饿狼传说", 16, 26, 2, 3));//构造标题和key值列表,生成工作簿
    Workbook wb = buildWorkbook2(27, 5, list, "domo");//生成服务器本地文件,如需输出到前端,只需要调用exportDatasExcel方法即可
    FileOutputStream fileOut = new FileOutputStream("domo.xlsx");wb.write(fileOut);fileOut.close();wb.close();
}

测试结果:

记录性结果excel:

复杂excel结果:

转载于:https://my.oschina.net/kevin2kelly/blog/1486059

利用poi进行数据的excel导出相关推荐

  1. java操作Excel之POI(4)利用POI实现数据的批量导出

    后台导出方法: 1 /** 2 * 后台导出方法 3 * 利用POI实现数据的批量导出 4 */ 5 public String export() throws Exception{ 6 Connec ...

  2. JAVA 利用poi EXCLE模板文档导出数据

    JAVA 利用poi EXCLE模板文档导出数据 1.导入jar包 下载地址:添加链接描述 提取码:xqkg 2.EXCLE模板 3.代码示例 package utill;import java.io ...

  3. PHP 利用PHPExcel到处数据到Excel;还有导出数据乱码的解决方案。

    PHP 利用PHPExcel到处数据到Excel:还有导出数据乱码的解决方案. 参考文章: (1)PHP 利用PHPExcel到处数据到Excel:还有导出数据乱码的解决方案. (2)https:// ...

  4. Laravel 使用PHP_XLSXWriter实现大数据量Excel导出

    我在去年写过一篇关于laravel的Excel导出文章:Laravel Excel 实现 Excel/CSV 文件导入导出功能,使用的是Laravel Excel实现的. 该扩展包含Excel导入导出 ...

  5. 基于easyexcel的MySQL百万级别数据的excel导出功能

    前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在U ...

  6. 数据库数据用Excel导出的3种方法

    数据库数据用Excel导出的3种方法 分类: .Net 2008-06-30 11:07 173人阅读 评论(2) 收藏 举报 将数据库数据用Excel导出主要有3种方法:用Excel.Applica ...

  7. python数据导出excel_python 数据生成excel导出(xlwt,wlsxwrite)代码实例

    这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多 ...

  8. python 生成excel_python 数据生成excel导出(xlwt,wlsxwrite)代码实例

    这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多 ...

  9. JSON格式数据转Excel导出

    json格式数据转Excel导出的两种方法 第一种table格式数据直接转Excel: 但是用这种方式会出现一种问题,就是当你的table有分页的情况下,只能抓取当前分页的数据. 拿到表格的id就可以 ...

最新文章

  1. PaddlePaddle yolov3
  2. Python3 range()函数
  3. 今日头条极速版怎样签到_今日头条投放广告的费用多少钱?今日头条广告投放完整流程是怎样?...
  4. UA OPTI512R 傅立叶光学导论11 卷积的性质
  5. Spring boot的Spring MVC自动配置原理
  6. cookie的保存时间
  7. Educational Codeforces Round 73 (Rated for Div. 2)
  8. 大学计算机应用基础教程第三章,计算机应用基础教程 李健苹 计算机应用基础教程 第3章...
  9. iOS开发者的一些前端感悟
  10. JMeter Linux下执行测试
  11. ios系统——先了解iCloud是什么吧
  12. 12306自动抢票及自动识别验证码功能(二)
  13. 计算体重指数BMI -C语言初学
  14. Learning Local Search Heuristics for Boolean Satisfiability 2020-04-30
  15. dhcp服务器响应慢,请教下大家DHCP获取慢的原因和解决思路
  16. tcping扫描所有端口_ping TCP端口的实用小工具tcping
  17. kaggle比赛流程(转)
  18. html 网页两边空白,windows7系统打开网页两边空白怎么办
  19. 计算机的mac改不了怎么办,Win7无法修改MAC怎么办 不能修改MAC的原因及解决方法...
  20. serverTimezone=UTC的那些坑

热门文章

  1. JavaWeb(二)——Http协议
  2. SQL Server 2014安装教程
  3. void与void*详解
  4. python怎么限制输出精度_谈谈关于Python里面小数点精度控制的问题
  5. Python 网络爬虫笔记5 -- Beautiful Soup库实战
  6. FPGA笔记(1)-逻辑代数与逻辑电路基础
  7. access开发精要(5)-合计group by
  8. 【重点EI会议推荐】机器学习主题方向论文征稿:2021计算机、物联网与控制工程国际学术会议(CITCE 2021)...
  9. Pytorch入门.pptx
  10. 【数学基础】从零构建统计随机变量生成器之离散基础篇