- 浏览: 212501 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
茶语人生:
...
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 3137在项目中需要去抓取一个项目的内容进行分析,目标系统需要登录验证 ... -
JSONArray JSONObject 转换时出错java.lang.reflect.InvocationTargetException
2013-11-11 15:56 15495在开发中经常会遇到把一个对象转换成JSON时提示转换错 ... -
Java中给数字补位
2012-10-18 14:28 8322在编写程序时时常在组合某一个编号时需要以0来补位,比如1的时候 ... -
Java 中切割中文字符串,避免乱码
2012-05-07 16:47 186在短信系统的开发中遇到的一个短信过长需要分成几段发送的问题,在 ... -
SSH 中乱码问题
2012-03-31 16:56 1152在使用SSH进行项目开发的时候出现了使用普通标签提交到ACTI ... -
Java XML 简要读写工具
2012-03-20 17:09 1390##这个工具类主要完成字符型XML的读取和把对象转换成XML的 ... -
Java Properties 属性文件读取写入工具类
2012-03-15 10:29 5836自己编写的一个简单工具类,方便操作属性文件 构造方法必须传入 ... -
Spring 中配置定时任务
2012-02-03 10:24 2041Spring 中集成了Quartz的工具,我们在Spring中 ... -
Tomcat 引用任意位置项目
2011-10-18 12:05 2402最近因为项目很大每次做了大型更新后再部署到TOMCAT会 ... -
properties 文件读写例子
2011-06-13 11:50 1299/** * 生成审批单编码 * * 生 ... -
SVN 解决更新时 Can't move Windows 7
2011-03-15 10:04 0Windows 7 下使用SVN进行项目更新的时候会出现 Ca ... -
properties 文件读取
2011-01-06 13:57 1187假设在SRC根目录下有文件 config.properties ... -
Java 获取子网掩码 (适用于Linux Jdk1.4)
2010-11-25 14:13 2443下面是获取Linux下子网掩码,Windows的获取方式有变化 ...
相关推荐
#### 三、其他注意事项 - **格式一致性**:无论是合并还是拆分文档,都需要注意保持格式的一致性,避免出现排版混乱的问题。 - **备份原文件**:在进行任何拆分或合并操作之前,建议备份原始文档,以防意外情况发生...
在合并单元格时,需要注意三个重要的事项: 1. 单元格CELL和ROW对象下标都是从0开始的。 2. 单元格合并时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格。 3. 合并单元格的...
5. **注意事项** - 要注意的是,此方法适用于2007年及以后版本的Word文档(.docx格式),对于旧版的Word文档(.doc格式),需要使用不同的API和方法。 - 占位符替换时,需要确保不会破坏原有的Word格式和样式。 -...
5. **高级功能**:POI还支持工作簿级别的操作,如合并单元格、插入图表、添加图片、定义命名区域等。此外,它还提供了事件模型,可以高效地处理大型工作簿,减少内存占用。 6. **与其他库的集成**:Apache POI可以...
#### 六、注意事项 - 在设置样式时,需要注意边界值的设定,如宽度、高度等。 - 对于复杂的样式设置,比如条件格式等,POI提供的支持更为全面。 - JXL库已经停止维护,建议使用POI进行新的开发项目。 #### 七、...
- 如果在合并单元格时遇到问题,确保已正确设置合并区域。 - 在处理大量图片时,考虑内存管理,因为POI会将整个工作簿加载到内存中。 以上就是使用Apache POI向Excel中插入图片的详细过程。实践中,你可以根据具体...
注意事项** - 确保正确关闭所有打开的文件流,以避免资源泄漏。 - 考虑到性能,大型 Excel 文件可能需要分块读取,而不是一次性加载整个工作簿。 - 使用最新版本的 Apache POI,以获得最新的功能和修复的安全漏洞...
3. **使用POI在Web项目中的注意事项**: - **依赖管理**:在Web项目中,你需要将必要的POI jar包添加到项目的类路径中。这通常通过Maven或Gradle等构建工具来完成,确保所有依赖项都被正确引入。 - **内存管理**:...
5. **注意事项** - **版本兼容性**:不同版本的POI处理不同版本的Excel文件,确保使用的POI版本支持你的文件格式。 - **异常处理**:在读写过程中,应处理可能出现的IO异常和数据转换异常。 6. **示例代码片段** ...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的...在实际项目中,你还可以实现更复杂的功能,如合并单元格、设置样式、添加图表、处理公式等。通过这个Demo,你可以快速上手并进一步扩展你的功能。
- 单元格样式、合并单元格、图表、公式等功能需要额外设置。 - 为了处理大量数据,可以考虑使用SXSSF(Streaming Usermodel API),它支持写入磁盘,减少内存占用。 通过上述介绍,你应能理解并实现使用Apache POI...
4. **注意事项** - **兼容性**:不同版本的Apache POI支持的文件格式和特性有所不同,3.8版本可能不支持较新的Excel功能。 - **内存管理**:处理大型文件时需注意内存使用,避免内存溢出。可以使用...
- POI还可用于合并单元格、添加图表、处理超链接、样式设置等复杂操作。 - 结合其他库,如Apache Tika,可以实现更全面的Office文档处理。 总结来说,Apache POI提供了一套强大的工具,使得Java开发者能够方便地...
6. **注意事项**: - 大文件处理:处理大型Excel文件时需注意内存管理,避免内存溢出,可以通过 Streaming Usermodel API 来优化。 - 版本更新:尽管3.17稳定,但后续版本可能增加了新特性或修复了更多问题,根据...
5. **注意事项** - 内存管理:处理大型Excel文件时,需特别注意内存使用,可以考虑使用SXSSF以减少内存消耗。 - 版本兼容性:确保使用的POI库版本与目标Office文件格式兼容。 - 错误处理:编写异常处理代码,以...
除了基本的读取操作,Apache POI还支持创建、修改和合并单元格,设置样式、公式等。例如,你可以设置单元格的字体、颜色、对齐方式,或者使用HSSFFont和XSSFFont类创建自定义样式。 **注意事项** 1. 记得在操作...
#### 四、注意事项 1. **异常处理**:实际开发中应添加适当的异常捕获与处理逻辑,确保程序的健壮性。 2. **资源释放**:及时关闭 `FileOutputStream` 和 `FileInputStream` 等流对象,避免资源泄露。 3. **性能...
- **单元格合并**:可以使用`HSSFRow`的方法合并单元格。 - **图表创建**:虽然本教程没有涉及,但Java_Poi还支持在Excel中创建图表。 #### 六、注意事项 1. **兼容性问题**:确保所使用的Java_Poi版本与目标Excel...