- 浏览: 209062 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
茶语人生:
...
Eclipse WebRoot变成可编译包问题 -
gaotao1210:
我最后一步做完后,启动报错:[ERROR] The trans ...
Axis 2 整合到 SSH 项目,Axis2 整合,Axis2 发布,Axis2 部署 -
jay简单爱:
帮了大忙..谢谢
Java中给数字补位 -
mukehua:
ok了ok了
Flexigrid 在IE中显示问题解决,CSS,Flexigrid 变形 -
xiuoymxiuo:
用上了
Div嵌套Div时的(OnMouseOut)事件处理
POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet。
跨第1行第1个到第2个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,0,(short)1));
跨第1行第1个到第2行第1个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,1,(short)0));
重点注意事项:
1.单元格CELL和ROW对象下标都是从0开始的。
2.单元格合并时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格
3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。
完整的例子程序包含了输出
过时了?那现在用哪个接口?API上没说addMergedRegion被取代了啊
跨第1行第1个到第2个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,0,(short)1));
跨第1行第1个到第2行第1个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,1,(short)0));
重点注意事项:
1.单元格CELL和ROW对象下标都是从0开始的。
2.单元格合并时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格
3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。
完整的例子程序包含了输出
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <jsp:directive.page import="com.yuantiao.ipub.ytcms.service.ArticleService"/> <jsp:directive.page import="com.yuantiao.ipub.ytcms.stat.bean.ArticleInfo"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.*"/> <jsp:directive.page import="org.apache.poi.hssf.util.HSSFColor"/> <jsp:directive.page import="org.apache.poi.hssf.util.Region"/> <jsp:directive.page import="java.text.SimpleDateFormat"/> <%!//自定义的方法,主要用于插入中文的字符格式 private void setGB2312String(HSSFCell Cell, String Value) throws Exception { Cell.setEncoding(HSSFCell.ENCODING_UTF_16); Cell.setCellValue(Value); } %> <% ArticleService articleService = new ArticleService(); ArticleInfo articleInfo; String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); String stateType = request.getParameter("stateType"); if(beginTime==null) { beginTime = ""; } if(endTime == null) { endTime = ""; } int statetype = stateType==null||stateType.equals("")?1:Integer.parseInt(stateType); //System.out.println(beginTime+","+endTime+","+stateType); ArrayList list = articleService.getArticleInfoList(statetype,beginTime,endTime); if(list.size() == 0 ){ %> <script> alert("无满足要求的信息."); window.close(); </script> <% return; } java.sql.Date bb=new java.sql.Date(System.currentTimeMillis()); SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义日期用格式化工具 int index = 0;//行标记,记录创建到第几行了 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet s = wb.createSheet(); wb.setSheetName(0, "MySheet"); HSSFHeader header = s.getHeader(); HSSFRow trow=null; HSSFCell tcell=null; HSSFCell cell = null; HSSFFont font = wb.createFont(); HSSFFont font2 = wb.createFont(); HSSFCellStyle cellStyle = wb.createCellStyle(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //字体加粗 font.setFontHeight((short) 380); // 设置字体大小 font.setFontName("宋体"); // 设置单元格字体 HSSFCellStyle cellStyle2 = wb.createCellStyle(); font2.setColor(HSSFFont.COLOR_RED); // 设置单元格字体的颜色. HSSFCellStyle cellStyle1_2 = wb.createCellStyle(); cellStyle1_2.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); cellStyle1_2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); cellStyle1_2.setBorderBottom((short)1); cellStyle1_2.setBorderLeft((short)1); cellStyle1_2.setBorderRight((short)1); cellStyle1_2.setBorderTop((short)1); cellStyle1_2.setBottomBorderColor(HSSFColor.BLACK.index); HSSFCellStyle cellStyle1_3 = wb.createCellStyle(); cellStyle1_3.setBorderBottom((short)1); cellStyle1_3.setBorderLeft((short)1); cellStyle1_3.setBorderRight((short)1); cellStyle1_3.setBorderTop((short)1); cellStyle1_3.setBottomBorderColor(HSSFColor.BLACK.index); HSSFCellStyle cellStyle1_4 = wb.createCellStyle(); cellStyle1_4.setBorderBottom((short)1); cellStyle1_4.setBorderLeft((short)1); cellStyle1_4.setBorderRight((short)1); cellStyle1_4.setBorderTop((short)1); cellStyle1_4.setAlignment(HSSFCellStyle.ALIGN_RIGHT); cellStyle1_4.setBottomBorderColor(HSSFColor.BLACK.index); //创建第一行和第二行的文字信息 /**********************标题第一行***************************/ //创建第一行的标题 int cellIndex = 0;//CELL的位置标记 cellIndex = 0;//CELL的位置标记 trow=s.createRow(index++);//创建行 trow.setHeight((short)400); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,"序号"); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,Integer.parseInt(stateType)==1?"作者":"出处"); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,"标题"); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,"主栏目"); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,"录入时间"); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,"文章分值"); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_2); setGB2312String(tcell,"分值合计1"); String pName = ""; String equalStr = "";//主判断 int totalScore = 0,loopQuantity = 0; boolean flag = false;//判断标记 ArticleInfo tempArticleInfo = null; for(int i=0;i<list.size();i++) { articleInfo = (ArticleInfo)list.get(i); //如果对比变量为空时进行初始化 if("".equals(equalStr)){ //如果类型为1时按作者进行统计和判断 if(statetype == 1){ equalStr = articleInfo.getAuthoer(); }else{ equalStr = articleInfo.getQuote(); } } //开始循环生成EXCEL行数据 cellIndex = 0;//初始化CELL下标 trow=s.createRow(index++);//创建行 trow.setHeight((short)400); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,""+(i+1)); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,statetype == 1? articleInfo.getAuthoer() : articleInfo.getQuote());//判断是显示作者信息还是出处信息 tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,articleInfo.getTitle()); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,articleInfo.getSiteName()); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,dateFormat.format(articleInfo.getRecordDate())); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,""+articleInfo.getScore()); tcell=trow.createCell((short)cellIndex++); tcell.setCellStyle(cellStyle1_3); setGB2312String(tcell,""); tempArticleInfo = null; //每次循环进行初始化,以便知道什么时候到达最后条记录 flag = false; if(i+1 != list.size()){ tempArticleInfo = (ArticleInfo)list.get(i+1); } //进行统一判断,方便后面使用,简化代码 if(tempArticleInfo != null){ if(statetype == 1){ flag = equalStr.equals(tempArticleInfo.getAuthoer()); }else{ flag = equalStr.equals(tempArticleInfo.getQuote()); } } //下一条记录不等于当前的记录对比值时进行相应的处理 if(!flag || tempArticleInfo == null){ totalScore += articleInfo.getScore(); loopQuantity ++; //进行跨列处理 //#########注意:跨行操作时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格 s.addMergedRegion(new Region(index-loopQuantity,(short)(cellIndex-1),index-1,(short)(cellIndex-1))); //获取最先需要跨的CELL,然后把值加入 tcell = s.getRow(index-loopQuantity).getCell((short)(cellIndex-1)); setGB2312String(tcell,""+totalScore); //清空统计数据 totalScore = 0; loopQuantity = 0; }else{ totalScore += articleInfo.getScore(); loopQuantity ++; } } //s.addMergedRegion(new Region(1,(short)(0),0,(short)(0))); pName="栏目统计表"; response.reset(); response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition","attachment; filename="+new String(pName.getBytes("gb2312"),"ISO-8859-1")+".xls"); ServletOutputStream outStream=null; try{ outStream = response.getOutputStream(); wb.write(outStream); }catch(Exception e) { e.printStackTrace(); }finally{ outStream.close(); } %>
评论
2 楼
jateide
2013-10-23
smile_wangchun 写道
poi3.7合并单元格addMergedRegion过时了,你没发现?
过时了?那现在用哪个接口?API上没说addMergedRegion被取代了啊
1 楼
smile_wangchun
2012-07-18
poi3.7合并单元格addMergedRegion过时了,你没发现?
发表评论
-
Java 使用HttpClient保持SESSION状态
2014-09-24 11:20 3075在项目中需要去抓取一个项目的内容进行分析,目标系统需要登录验证 ... -
JSONArray JSONObject 转换时出错java.lang.reflect.InvocationTargetException
2013-11-11 15:56 15420在开发中经常会遇到把一个对象转换成JSON时提示转换错 ... -
Java中给数字补位
2012-10-18 14:28 8232在编写程序时时常在组合某一个编号时需要以0来补位,比如1的时候 ... -
Java 中切割中文字符串,避免乱码
2012-05-07 16:47 186在短信系统的开发中遇到的一个短信过长需要分成几段发送的问题,在 ... -
SSH 中乱码问题
2012-03-31 16:56 1115在使用SSH进行项目开发的时候出现了使用普通标签提交到ACTI ... -
Java XML 简要读写工具
2012-03-20 17:09 1351##这个工具类主要完成字符型XML的读取和把对象转换成XML的 ... -
Java Properties 属性文件读取写入工具类
2012-03-15 10:29 5787自己编写的一个简单工具类,方便操作属性文件 构造方法必须传入 ... -
Spring 中配置定时任务
2012-02-03 10:24 1985Spring 中集成了Quartz的工具,我们在Spring中 ... -
Tomcat 引用任意位置项目
2011-10-18 12:05 2373最近因为项目很大每次做了大型更新后再部署到TOMCAT会 ... -
properties 文件读写例子
2011-06-13 11:50 1252/** * 生成审批单编码 * * 生 ... -
SVN 解决更新时 Can't move Windows 7
2011-03-15 10:04 0Windows 7 下使用SVN进行项目更新的时候会出现 Ca ... -
properties 文件读取
2011-01-06 13:57 1145假设在SRC根目录下有文件 config.properties ... -
Java 获取子网掩码 (适用于Linux Jdk1.4)
2010-11-25 14:13 2373下面是获取Linux下子网掩码,Windows的获取方式有变化 ...
相关推荐
java excel poi合并单元格
poi获取合并单元格,Java 对excel 文档处理。
java POI导出Excel文件多表头文件
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法
poi获取exccel有合并单元格的数据,存入List
poi读取合并单元格帮助类
poi生成excel及合并单元格示例,详见文章http://blog.csdn.net/geloin/article/details/17219885
关于java EXCEL poi 合并后无法显示或无法设置边框问题 【本人亲测】 excel poi 新手! 坑了1.5天!
poi导入/导出Excel表格,合并单元格的读取和设置
利用poi进行excel相同内容合并单元格,只摘要了传入部分功能,请关注addMergedRegion方法
java poi 填充word(合并单元格,添加图片,设置字号)(csdn)————程序
easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格
【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理
POI excel单元格顔色设定
Java操纵POI解析Excel表,根据表头将内容储存。通过实体类set、get方便其它方法引用
10、添加区域,合并单元格 11、保存Excel文件 12、根据单元格不同属性返回字符串数值 13、常用单元格边框格式 14、设置字体和内容位置 15、插入图片 16、调整工作表位置 17、设置打印区域 18、标注脚注 19...
java 使用POI合并两个word文档.docx