poi自定义样式导出

使用Java main方法实现导出

复制到java程序运行可以直接导出, (导出内容来自百度),前提是引入poi jar包,我没找到连接,有资源的希望提供一下

  public static void main(String[] args) throws IOException {//创建HSSFWorkbook对象HSSFWorkbook wb = new HSSFWorkbook();// 设置字体样式HSSFFont font = wb.createFont();// 字体大小font.setFontHeightInPoints((short) 30);// 字体font.setFontName("楷体");// 颜色font.setColor(HSSFColor.GREEN.index);// 设置单元格样式 红色HSSFCellStyle rad = wb.createCellStyle();rad.setFillForegroundColor(IndexedColors.RED.getIndex());rad.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 设置单元格样式 绿色HSSFCellStyle green = wb.createCellStyle();green.setFillForegroundColor(IndexedColors.GREEN.getIndex());green.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 字体样式HSSFCellStyle fond = wb.createCellStyle();fond.setFont(font);//建立sheet对象 ,取名'成绩表'HSSFSheet sheet=wb.createSheet("成绩表");//在sheet里创建第一行,参数为行索引HSSFRow row1=sheet.createRow(0);//创建单元格HSSFCell cell=row1.createCell(0);//设置单元格内容cell.setCellValue("学生成绩表");//设置单元格颜色,想要什么颜色就传什么参数, rad || greencell.setCellStyle(fond);//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列, 第一列为0,第二列为1sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));//在sheet里创建第二行// 这里要根据实际需求使用for动态生成行(row),我这里做demo就写死了HSSFRow row2=sheet.createRow(1);//创建单元格并设置单元格内容  row2.createCell(0)创建第二行第一个单元格// 这里要根据实际需求使用for动态生成列,也可以自己手写HSSFCell cell1 = row2.createCell(0);cell1.setCellValue("姓名");//一样的设置颜色()cell1.setCellStyle(rad);// 注意: 上面的写法正确;// 错误写法:row2.createCell(0).setCellValue("姓名");// ----- :row2.createCell(0).setCellStyle(rad);// 影响: 这样等于构建两个单元格,第二个会吧第一个覆盖,所以只会显示颜色,汉字被覆盖row2.createCell(1).setCellValue("班级");row2.createCell(2).setCellValue("语文成绩");row2.createCell(3).setCellValue("数学成绩");row2.createCell(4).setCellValue("英语成绩");//在sheet里创建第三行HSSFRow row3=sheet.createRow(2);row3.createCell(0).setCellValue("小明");row3.createCell(1).setCellValue("1班");row3.createCell(2).setCellValue(80);row3.createCell(3).setCellValue(75);row3.createCell(4).setCellValue(88);HSSFRow row4=sheet.createRow(3);row4.createCell(0).setCellValue("小红");row4.createCell(1).setCellValue("1班");row4.createCell(2).setCellValue(82);row4.createCell(3).setCellValue(70);row4.createCell(4).setCellValue(90);//输出Excel文件, 我本机维护好的demo文件夹,没有这个文件加会报错, System.currentTimeMillis() 一串顺随机数String fileName = "D:\\demo\\" + System.currentTimeMillis() + ".xlsx";File aa = new File(fileName);// 写出文件流wb.write(aa);// 关闭文件流wb.close();}

基于springboot导出

Controller类内容:单纯的调用方法

package com.boot.controller;import com.boot.entity.ExcelImport;
import com.boot.service.ExcelService;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** Excel Controller*/
@RestController
@RequestMapping("excel")
public class ExcelController {@Autowiredprivate ExcelService excelService;@GetMapping("poiExport")public void poiImport(HttpServletResponse response) throws IOException {excelService.poiExport(response);}
}

service内容:详细解释在代码注释,HttpServletrequest 与HttpServletResponse区别和response内容类型解释在代码后面

@Overridepublic void poiExport(HttpServletResponse response) throws IOException {//创建文件名(改)String fileName = "成绩表.xls";// 解决中文乱码问题String fileNameURL = URLEncoder.encode(fileName, "UTF-8");// vnd.ms-excel 具体意义见下response内容类型解释response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameURL);//创建HSSFWorkbook对象HSSFWorkbook wb = new HSSFWorkbook();// 设置字体样式HSSFFont font = wb.createFont();// 字体大小font.setFontHeightInPoints((short) 30);// 字体font.setFontName("楷体");// 颜色font.setColor(HSSFColor.GREEN.index);// 设置单元格样式 红色HSSFCellStyle rad = wb.createCellStyle();rad.setFillForegroundColor(IndexedColors.RED.getIndex());rad.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 设置单元格样式 绿色HSSFCellStyle green = wb.createCellStyle();green.setFillForegroundColor(IndexedColors.GREEN.getIndex());green.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 字体样式HSSFCellStyle fond = wb.createCellStyle();fond.setFont(font);//建立sheet对象 ,取名'成绩表'HSSFSheet sheet = wb.createSheet("成绩表");//在sheet里创建第一行,参数为行索引HSSFRow row1 = sheet.createRow(0);//创建单元格HSSFCell cell = row1.createCell(0);//设置单元格内容cell.setCellValue("学生成绩表");//设置单元格颜色,想要什么颜色就传什么参数, rad || greencell.setCellStyle(fond);//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列, 第一列为0,第二列为1sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));//在sheet里创建第二行// 这里要根据实际需求使用for动态生成行(row),我这里做demo就写死了HSSFRow row2 = sheet.createRow(1);//创建单元格并设置单元格内容  row2.createCell(0)创建第二行第一个单元格// 这里要根据实际需求使用for动态生成列,也可以自己手写HSSFCell cell1 = row2.createCell(0);cell1.setCellValue("姓名");//一样的设置颜色()cell1.setCellStyle(rad);// 注意: 上面的写法正确;// 错误写法:row2.createCell(0).setCellValue("姓名");// ----- :row2.createCell(0).setCellStyle(rad);// 影响: 这样等于构建两个单元格,第二个会吧第一个覆盖,所以只会显示颜色,汉字被覆盖row2.createCell(1).setCellValue("班级");row2.createCell(2).setCellValue("语文成绩");row2.createCell(3).setCellValue("数学成绩");row2.createCell(4).setCellValue("英语成绩");//在sheet里创建第三行HSSFRow row3 = sheet.createRow(2);row3.createCell(0).setCellValue("小明");row3.createCell(1).setCellValue("1班");row3.createCell(2).setCellValue(80);row3.createCell(3).setCellValue(75);row3.createCell(4).setCellValue(88);HSSFRow row4 = sheet.createRow(3);row4.createCell(0).setCellValue("小红");row4.createCell(1).setCellValue("1班");row4.createCell(2).setCellValue(82);row4.createCell(3).setCellValue(70);row4.createCell(4).setCellValue(90);wb.write(response.getOutputStream());// 别忘了关流wb.close();}

HttpServletrequest 与HttpServletResponse区别(<—点击)

response内容类型:

下述为内容格式=>请求体中对应的编码

     'doc'        => 'application/msword','bin'        => 'application/octet-stream','exe'        => 'application/octet-stream','so'        => 'application/octet-stream','dll'        => 'application/octet-stream','pdf'        => 'application/pdf','ai'        => 'application/postscript','xls'        => 'application/vnd.ms-excel','ppt'        => 'application/vnd.ms-powerpoint','dir'        => 'application/x-director','js'        => 'application/x-javascript','swf'        => 'application/x-shockwave-flash','xhtml'        => 'application/xhtml+xml','xht'        => 'application/xhtml+xml','zip'        => 'application/zip','mid'        => 'audio/midi','midi'        => 'audio/midi','mp3'        => 'audio/mpeg','rm'        => 'audio/x-pn-realaudio','rpm'        => 'audio/x-pn-realaudio-plugin','wav'        => 'audio/x-wav','bmp'        => 'image/bmp','gif'        => 'image/gif','jpeg'        => 'image/jpeg','jpg'        => 'image/jpeg','png'        => 'image/png','css'        => 'text/css','html'        => 'text/html','htm'        => 'text/html','txt'        => 'text/plain','xsl'        => 'text/xml','xml'        => 'text/xml','mpeg'        => 'video/mpeg','mpg'        => 'video/mpeg','avi'        => 'video/x-msvideo','movie'        => 'video/x-sgi-movie',

到此为止就导出完毕,欣赏一下效果:

excel内容:

使用poi按路径导入和基于springboot导入

先展示excel样式:

先附上Controller类内容:单纯的调用方法

package com.boot.controller;import com.boot.entity.ExcelImport;
import com.boot.service.ExcelService;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** Excel Controller*/
@RestController
@RequestMapping("excel")
public class ExcelController {@Autowiredprivate ExcelService excelService;@PostMapping("poiImport")public List<ExcelImport> poiImport(@RequestParam("file") MultipartFile file) throws IOException, InvalidFormatException {return excelService.poiImport(file.getInputStream());}
}

service内容:详细解释在代码注释

@Overridepublic List<ExcelImport> poiImport(InputStream in) throws IOException, InvalidFormatException {// 可以直接读取路径导入excel// File path = new File("E:\\导入.xlsx");// XSSFWorkbook sheets = new XSSFWorkbook(path);XSSFWorkbook sheets = new XSSFWorkbook(in);// 将没有内容的单元格有null转为"",避免空指针的出现sheets.setMissingCellPolicy(Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);// 获取第一个sheetXSSFSheet sheet0 = sheets.getSheetAt(0);// 获取excel有几列,一般第一行为表头,所以获取第一行的列数量接可以了int num = sheet0.getRow(0).getPhysicalNumberOfCells();List<ExcelImport> list = new ArrayList<>();// 循环遍历所有行, i = 1指当前Excel的第二行,第一行为表头不读取for (int i = 1; i <= sheet0.getLastRowNum(); i++) {XSSFRow row = sheet0.getRow(i);// 判断当前行是否有数据if (notEmptyRow(row)) {ExcelImport excelImport = new ExcelImport();// 将当前行的所有单元格内容格式转成String类型for (int j = 0; j < num; j++) {row.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellType(CellType.STRING);}excelImport.setName(row.getCell(0).getStringCellValue());excelImport.setAge(row.getCell(1).getStringCellValue());excelImport.setHobby(row.getCell(2).getStringCellValue());list.add(excelImport);}}return list;}/*** 判断当前行是否有值** @param row 当前行内容* @return boolean*/public boolean notEmptyRow(XSSFRow row) {if (row == null || row.toString().isEmpty()) {return false;} else {Iterator<Cell> it = row.iterator();boolean isEmpty = true;while (it.hasNext()) {Cell cell = it.next();if (StringUtils.hasText(cell.getStringCellValue().trim())) {isEmpty = false;break;}}return !isEmpty;}}

导入采用postMan测试,postMan使用教程百度或者请教会使用的人,效果如图

jxls简单使用

jxls是通过模板导出excel,jxls只做数据填充,样式由模板自定义

先提供jar包

         <dependency><groupId>org.jxls</groupId><artifactId>jxls</artifactId><version>2.4.6</version></dependency><dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>1.0.15</version></dependency><dependency><groupId>org.jxls</groupId><artifactId>jxls-jexcel</artifactId><version>1.0.7</version></dependency><dependency><groupId>net.sf.jxls</groupId><artifactId>jxls-core</artifactId><version>1.0.5</version></dependency>

模板样式

解释一下模板表达式:${staffs.name}: ${}固定写法, staffs为java程序map的key, name为字段名, 数据结构见下java程序
如果表达式内的字段名错误或者是一个不存在的字段名,则Java程序会包空指针错误

简单导出

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jxls.transformer.XLSTransformer;public class JxlsUtils{/*** @param args*/public static void main(String[] args) throws Exception {List<Staff> staffs = new ArrayList<Staff>();Staff s1 = new Staff("张三", 6000D, 3000D);staffs.add(s1);Staff s2 = new Staff("李四", 5000D, 2000D);staffs.add(s2);Staff s3 = new Staff("王五", 4000D, 1000D);staffs.add(s3);// 模板位置String srcFilePath = "e:/demo.xlsx";// 导出路径及文件名String destFilePath = "e:/date.xlsx";Map<String, List<Staff>> beanParams = new HashMap<String, List<Staff>>();beanParams.put("staffs", staffs);// 核心两句导出XLSTransformer former = new XLSTransformer();former.transformXLS(srcFilePath, beanParams, destFilePath);System.out.println("大聪明,导出完毕");}
}

导出效果

持续更新~~

导入导出专栏(poi,jxls)相关推荐

  1. excel 导入导出使用poi自定义注解

    excel导入导出使用poi自定义注解 最近在做一个数据导入导出的模块 在网上找了一些例子 在这里整理一下 这里就不再贴原作者的地址  (以下代码来自网上非原创 稍作简单修改)  首先引入pom.xm ...

  2. 报表技术2(百万数据导入导出,POI操作word)

    POI模板导出,操作word 导出用户详情数据(图片,公式处理) 使用模板导出用户详细信息 使用模板引擎 1.编写模板引擎 2.使用模板引擎 百万数据导出 代码实现: 百万数据导入 步骤分析: 1.自 ...

  3. java实现excel的导入导出(poi详解)

    经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了.是比较好用的excel导出工具. 下面来认识一下这个它吧. 我们知道要 ...

  4. java io导出excel表格_Java IO 导入导出Excel表格

    1.将excel导入到内存 1. 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象 InputStream in = new FileInputStrea ...

  5. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  6. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」(亲测)

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 来源:Springboot使用POI实现导出Excel文件示例的搜索结果-阿里云开 ...

  7. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...

  8. Excel的导入与导出(POI)

    2019独角兽企业重金招聘Python工程师标准>>> ExcelAnnotation.java; package cn.chn.chen.dev.excel;import java ...

  9. POI实现大数据EXCLE导入导出,解决内存溢出问题

    POI实现大数据EXCLE导入导出,解决内存溢出问题 参考文章: (1)POI实现大数据EXCLE导入导出,解决内存溢出问题 (2)https://www.cnblogs.com/huangjian2 ...

最新文章

  1. HTML5 文件域+FileReader 读取文件并上传到服务器(三)
  2. Opencv2.4.9源码分析要点摘录
  3. 英语 四六级 学习网址
  4. Linux运行jmeter
  5. 搭建VS2008+OpenCV2.1开发环境
  6. JSP中的注释操作及JSP中的三种Scriptlet
  7. 趣味物理中的计算机科学,【趣味物理】10个有趣的科学实验,揭示物理原理。...
  8. python打平处理嵌套list
  9. 仿美团外卖小程序源码
  10. python保存路径_Python模块的正确存放位置
  11. C高级第二次PTA作业
  12. Android 获取Usb设备类型
  13. 筱筱笔记:npm发包流程
  14. VirtualLab基础实验教程-7.偏振(2)
  15. initiator、target、lun之间的映射
  16. docker build requires one arguments
  17. caffe学习(4)数据层
  18. 【现代控制理论】| 线性系统的状态空间法
  19. SPARTAN3 AN/XC3S50AN无法下载到内部flash的解决方案
  20. 滴滴开源的深度与温度——滴滴开源委员会秘书长吴国斌专访

热门文章

  1. SONY WH-1000XM3 User Guide
  2. 解决索尼WH-1000XM3使用蓝牙连接电脑无法使用麦克风的问题
  3. keep-alive实现原理
  4. 台式计算机主板检测与维修,主板故障!教你如何用主板诊断卡检测维修电脑主板故障...
  5. python处理excel多重筛选
  6. Latex--将参考文献号设为上标,并加方括号!
  7. Gald to meet you
  8. Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法
  9. oneUI 如何获取swtch值
  10. 苹果手机数据线充不了电_苹果手机充不进电怎么回事?iPhone充电没反应解决方法...