poi导出Excel(分行单元格颜色设置,字体设置,合并单元格,插入图片)

这是一个日报导出功能的代码;图片是用JfreeChars生成好的,话不多少 看代码

public String excelExport(HttpServletRequest request,HttpServletResponse response,CarSaledailyDTO carSaledailyDTO){//获取需要导出的报表数据
    List
<List<List>> list = carSaledailyFacade.excelData(carSaledailyDTO,request);HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("销售日报");CellRangeAddress region=new CellRangeAddress(0, 1, 0, 30);sheet.addMergedRegion(region);HSSFRow row=sheet.createRow(0);//合并列HSSFCell cell=row.createCell(0);HSSFFont f = workbook.createFont();f.setFontName("黑体");f.setFontHeightInPoints((short) 22);//字号 f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗 HSSFCellStyle style = workbook.createCellStyle(); style.setFont(f); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中cell.setCellValue("日报");cell.setCellStyle(style);int r =2;for(int i = 0;i<list.size();i++){r=createRow(list.get(i), sheet,r,workbook);} //cell.setCellStyle(style);//HSSFSheet sheet1 = workbook.createSheet("全国每日提报量和成交合同量"); FileInputStream stream;String path = request.getSession().getServletContext().getRealPath("/");System.out.println(path);try {stream = new FileInputStream(path+"images\\pic\\line.png");byte[] bytes=new byte[(int)stream.getChannel().size()];stream.read(bytes);//读取图片到二进制数组int pictureIdx = workbook.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);HSSFPatriarch patriarch = sheet.createDrawingPatriarch();HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short)0, 33, (short)20, 60);HSSFPicture pict = patriarch.createPicture(anchor, pictureIdx);//pict.resize();//自动调节图片大小,图片位置信息可能丢失} catch (Exception e1) {// TODO Auto-generated catch block e1.printStackTrace();}ByteArrayOutputStream os = new ByteArrayOutputStream();try {workbook.write(os);} catch (IOException e) {e.printStackTrace();}byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);try {// 设置response参数,可以打开下载页面 response.reset();response.setContentType("application/vnd.ms-excel;charset=utf-8");//response.setHeader("Content-Disposition", "attachment;filename=" + new String(".xls").getBytes(), "iso-8859-1"));String filename = "SaleDailyReport"+carSaledailyDTO.getSearchDate()+".xls";response.setHeader("Content-Disposition", "attachment;filename= "+ URLEncoder.encode(filename, "UTF-8"));ServletOutputStream out = response.getOutputStream();BufferedInputStream bis = null;BufferedOutputStream bos = null;bis = new BufferedInputStream(is);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;// Simple read/write loop.while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}if (bis != null)bis.close();if (bos != null)bos.close();} catch (final IOException e) {e.printStackTrace();} return "导出成功!";}

上面这个方法是koala框架里的基于spring mvc的一个controller,完全可以忽略参数*DTO;

    public Integer createRow(List<List> list,HSSFSheet sheet,int r,HSSFWorkbook workbook){for(int k = 0;k<list.size();k++){HSSFCellStyle style = workbook.createCellStyle();//设置边框样式
             style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置边框颜色
             style.setTopBorderColor(HSSFColor.BLACK.index);style.setBottomBorderColor(HSSFColor.BLACK.index);style.setLeftBorderColor(HSSFColor.BLACK.index);style.setRightBorderColor(HSSFColor.BLACK.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);if(r==2){style.setFillForegroundColor(HSSFColor.YELLOW.index);}else if(r==7||r==15||r==23||r==31){style.setFillForegroundColor(HSSFColor.RED.index);}else if(r==9){style.setFillForegroundColor(HSSFColor.GOLD.index);}else if(r==17){style.setFillForegroundColor(HSSFColor.TAN.index);}else if(r==25){style.setFillForegroundColor(HSSFColor.SEA_GREEN.index);}else{style.setFillForegroundColor(HSSFColor.WHITE.index);}HSSFRow row = sheet.createRow(r);if(list.get(k)!=null){for(int j =0;j<list.get(k).size();j++){HSSFCell cell = row.createCell(j);cell.setCellValue((list.get(k).get(j))+"");cell.setCellStyle(style);}}r+=1;}if(r==8||r==16||r==24){HSSFRow row1 = sheet.createRow(r);for(int j =0;j<list.get(0).size();j++){HSSFCellStyle style = workbook.createCellStyle();style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setFillForegroundColor(HSSFColor.GREY_50_PERCENT.index);HSSFCell cell = row1.createCell(j);cell.setCellValue("");cell.setCellStyle(style);}}r+=1;System.out.println(r);return r;}

除去Excel的标题‘日报’部分 和 图片导入;其余数据写入及单元格样式设计实在createRow方法里面实现的;

需要注意的是

1.我们在页面导出excel文档时,都会涉及到一个导出路径选择的问题,在第一段代码中设置response参数之后就可以实现;发送到出请求时在直接在页面发送超链接请求,如:

2.使用浏览器导出excel的文件名如果是中文,可能会出现乱码问题(这里火狐浏览器比较特殊,所以为了不出现乱码,建议统一使用英文名)

response.setHeader("Content-Disposition", "attachment;filename=" + new String(".xls").getBytes(), "UTF-8"));// 火狐浏览器
response.setHeader("Content-Disposition", "attachment;filename= "+ URLEncoder.encode(filename, "UTF-8"));//其他

转载于:https://www.cnblogs.com/Mu-yi/p/5465029.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim 复制一行并且粘贴_Vim常用命令2之文本操作

文本操作无非增删改查&#xff0c;搜索&#xff0c;替换&#xff0c;复制粘贴&#xff0c;总结有如下命令&#xff08;正常模式下&#xff09;九四干&#xff1a;Vim常用命令1之移动光标​zhuanlan.zhihu.com1. 增1.1 行内插入i 光标之前插入I 行首插入a光标之后插入A 行末插入…

数据访问增删改查之单项查询

封装类 <?php //纯php,可以删掉html代码直接写 //封装类&#xff0c;这样用起来方便&#xff0c;不必每次都去再写了 //用驼峰法命名类名&#xff0c;首字母大写 class ChaXun { public $host"localhost";//数据库地址,可以直接赋值为"localhost"pu…

matlab中noisbloc,基于小波变换的微弱信号检测技术的研究.doc

毕业论文基于小波变换的微弱信号检测技术研究学生姓名&#xff1a; 学号&#xff1a;学 院&#xff1a;专 业&#xff1a;指导教师&#xff1a;2012年 6月基于小波变换的微弱信号检测技术研究摘要&#xff1a;微弱信号检测的目的是要提取需要检测到的微弱信息&#xff0c;利用小…

import是引进外部函数吗_vue3已正式发布,你学了吗

慌慌张张,匆匆忙忙,vue2还没用好,vue3就来了&#xff1f;&#xff1f;&#xff1f;&#xff1f;真的学不动了.......嘴上说着学不动,只见有的人在偷偷的在学习&#xff0c;我也利用假期看了看vue3...,倒吸一口气&#xff0c;还好差别并不是很大。别问我什么原理&#xff0c;底层…

aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究

内容摘要&#xff1a;基于信号到达角度(AOA)的定位算法是一种常见的无线传感器网络节点自定位算法&#xff0c;算法通信开销低&#xff0c;定位精度较高。由于各种原因&#xff0c;估测的多个节点位置可能存在不可靠位置&#xff0c;提出了一种改进的基于信号到达角的定位方法&…

R语言-时间日期函数

R语言时间日期函数 1. 返回当前日期时间&#xff0c;有两种方式&#xff1a; Sys.time() date() 举例 format(Sys.time(), "%a %b %d %X %Y %Z")#[1] "周五 五月 06 14:17:40 2016 CST"format(Sys.time(), "%H:%M:%OS3")#[1] "14:17:40.6…

各种水龙头拆卸图解_水龙头上包卫生纸,竟有这种效果!邻居看了都想学

你家该大扫除了吗&#xff1f;如何打扫厨房可是个大问题厨房的卫生问题今天一一教你解决洗碗池洗碗池经常不擦&#xff0c;污渍会积得很厚&#xff0c;陈旧老污渍怎么清除呢&#xff1f;方法&#xff1a;白醋 用毛巾裹在水龙头上&#xff0c;倒上白醋。因为白醋具有腐蚀性&…

php按id获取整条数据库,Ajax取得数据库的json值,想通过id获取对应信息,但是都默认获取第一条了...

PHP<?PHP header("Content-Type: text/html; charsetutf-8");include(conn.php);//链接数据库$sql select id,article_name,check_box,radio_box,content,input_name,input_number,input_title,input_describe from article;$res mysqli_query($conn,$sql);$da…

服务器系统及软件常见漏洞

服务器系统及软件常见漏洞 漏洞名称允许Traceroute探测远端WWW服务支持TRACE请求远端WWW服务提供了对WebDAV的支持远端WEB服务器上存在/robots.txt文件远端VNC服务正在运行远端HTTP服务器类型和版本信息泄漏远端DNS服务允许递归查询远程代理服务器允许连接任意端口远程代理服务…

链式存储结构 php,【PHP 实现数据结构】链式队列

什么是链式队列队列是一种“先进先出”的存储结构,是一种特殊的线性表&#xff0c;于它只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。通常队列可以分为顺序队列和链式队列两种实现&#xff0c;顺序队列顾名思义就是采用顺序存储&#xff0…

base64_encode() 和 base64_decode() 8bit图片通过网络传输

一、为什么要使用base64编码&#xff1f; Base64是一种基于64个可打印字符来表示二进制数据的表示方法。 有些网络传送渠道并不支持所有的字节&#xff0c;例如传统的邮件只支持可见字符的传送&#xff0c;像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制…

图标圆角角度_UI设计中图标的规范及原则【附全套视频】

icon是一种图标格式&#xff0c;用于系统图标、软件图标等&#xff0c;这种图标扩展名为*.icon、*.ico。常见的软件或windows桌面上的那些图标一般都是ICON格式的。icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文件(WAR)的根的相对路…

设计模式(十一):从文Finder中认识组合模式(Composite Pattern)

上一篇博客中我们从从电影院中认识了"迭代器模式"(Iterator Pattern)&#xff0c;今天我们就从文件系统中来认识一下“组合模式”&#xff08;Composite Pattern&#xff09;。说到组合模式&#xff0c;在此我想聊一下在类图中有组合与聚合的关系&#xff0c;这两者都…

PHP7不能用string类名,解决thinkphp php7 Cannot use ‘String’ as class name as it is reserved...

我有一网站之前用php7运行thinkphp没有什么问题&#xff0c;但是最近发现开启验证码的时候发现有错误Cannot use String as class name as it is reserved在google baidu搜索了一下还是没有解决方法于是自己动手解决&#xff0c;看来我是第一个分享出来的人原因&#xff1a;有一…

python序列化对象的函数_使 Python 对象可序列化的函数

from copy import deepcopyfrom str import basestringdef enserializable(model):"""本函数用于将对象可序列化&#xff0c;且返回的字典都是新的(deepcopy)"""if isinstance(model, dict):model deepcopy(model)to_pop []for k in model:# 过…

Activity(二)

多个Activity之间的调用 建立一个Activity 配置layout文件夹下fragment_main.xml文件 在layout下新建other.xml文件 xml文件创建的id需要编译才能生成 在同一工程src文件夹下新建class文件 查找id并作关联 加入监听器&#xff0c;调用另一个Activity的类 调用监听器 注&#xf…

php用asp文件js,asp下用fso生成js文件的代码

asp下用fso生成js文件的代码更新时间&#xff1a;2008年06月24日 23:47:54 作者&#xff1a;asp下使用fso生成js代码的方法Set fso Server.CreateObject("Scripting.FileSystemObject")set fdfso.createtextfile(server.MapPath("../category.js"),true)…

relativelayout中按键不能点_CNC | M80/M800系列系统常见按键和外部存储器故障

一、按键无效现象1.操作人员对机床操作时画面无反应现象M80/M800系列系统在使用键盘或触摸屏输入时&#xff0c;请勿连击键盘按键&#xff0c;输入一 次即可。键盘每向NC输入一次&#xff0c;NC系统需要计算一次&#xff0c;连续的多次重复输入&#xff0c;NC多次重复计算、显示…

Problem J

Total Submission(s) : 102 Accepted Submission(s) : 60 Problem Description有一楼梯共M级&#xff0c;刚开始时你在第一级&#xff0c;若每次只能跨上一级或二级&#xff0c;要走上第M级&#xff0c;共有多少种走法&#xff1f;Input输入数据首先包含一个整数N&#xff0c…

百度AI人脸检测测颜值php,百度AI人脸识别测颜值源码app

百度AI人脸识别测颜值源码app是由百度AI官方提供的&#xff0c;将人脸识别分为了两个接口&#xff0c;v2与vv3。需要根据文档权限来选择接口类型&#xff0c;这款软件非常方便用户学习和体验。想要学习相关信息的朋友可以来看看哦。百度AI人脸识别测颜值介绍百度AI人脸识别测颜…