- 浏览: 134642 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
zheng_zhimeng:
这个版本在linux的版本下有问题,亲们用的没有问题么
文档展示:IcePDF 将PDF转换为图片 -
yuming.xiao:
转换的某些图片,有些模糊。不知道楼主遇到这个问题没有
文档展示:IcePDF 将PDF转换为图片 -
zenghongqing:
您好,请教您一个问题://cell内容字符串总宽度 doub ...
Java POI Excel 行高自适应 -
xiang37:
http://xiva.iteye.com/blog/2066 ...
视频分割项目预研 -
I白I:
怎么还配置数据库了?
视频分割项目预研
由于工作上的需要,特地研究了下Excel合并的问题,现贴出来,希望能帮到有需要的同行
参考资料
http://blog.sina.com.cn/s/blog_73d38dbc0100r2ob.html
http://blog.163.com/tangweibo_good/blog/static/7749240920114265535652/
上面这个163地址的程序实现了同一个Excel不同工作簿的拷贝。
在上面的基础上上,我实现了不同Excel工作簿的拷贝,重点在样式的拷贝。
由于种种原因,在cell的样式拷贝时需要重新创建style对象
调用示例
具体的拷贝代码
参考资料
http://blog.sina.com.cn/s/blog_73d38dbc0100r2ob.html
http://blog.163.com/tangweibo_good/blog/static/7749240920114265535652/
上面这个163地址的程序实现了同一个Excel不同工作簿的拷贝。
在上面的基础上上,我实现了不同Excel工作簿的拷贝,重点在样式的拷贝。
由于种种原因,在cell的样式拷贝时需要重新创建style对象
//样式的设置 HSSFCellStyle cStyle = destWorkBook.createCellStyle(); cStyle.cloneStyleFrom(sourceCell.getCellStyle()); targetCell.setCellStyle(cStyle);
调用示例
public static HSSFWorkbook mergeHSSFWorkbooks(HSSFWorkbook[] workbooks) { if(workbooks == null || workbooks.length == 0){ return null; }else if(workbooks.length == 1){ return workbooks[0]; } HSSFWorkbook wbFirst = workbooks[0]; HSSFSheet toSheet = wbFirst.getSheetAt(0); for (int i = 1; i < workbooks.length; i++) { HSSFWorkbook wb = workbooks[i]; HSSFSheet fromsheet = wb.getSheetAt(0); copyRows(wbFirst, wb, fromsheet, toSheet, fromsheet.getFirstRowNum(), fromsheet.getLastRowNum(), toSheet.getLastRowNum()); } return wbFirst; }
具体的拷贝代码
/** * @param destWorkBook 目标workbook * @param sourceWorkBook 源workbook * @param sourceSheet 源sheet * @param targetSheet 目sheet * @param pStartRow 起始读取行 * @param pEndRow 结束读取行 * @param pPosition 目标保存 */ public static void copyRows(HSSFWorkbook destWorkBook, HSSFWorkbook sourceWorkBook, HSSFSheet sourceSheet,HSSFSheet targetSheet, int pStartRow, int pEndRow, int pPosition) { HSSFRow sourceRow = null; HSSFRow targetRow = null; HSSFCell sourceCell = null; HSSFCell targetCell = null; int cType; int i; int j; int targetRowFrom; int targetRowTo; if ((pStartRow == -1) || (pEndRow == -1)) { return; } List<CellRangeAddress> oldRanges = new ArrayList<CellRangeAddress>(); for (i = 0; i < sourceSheet.getNumMergedRegions(); i++) { oldRanges.add(sourceSheet.getMergedRegion(i)); } // 拷贝合并的单元格。原理:复制当前合并单元格后,原位置的格式会移动到新位置,需在原位置生成旧格式 for (int k = 0; k < oldRanges.size(); k++) { CellRangeAddress oldRange = oldRanges.get(k); CellRangeAddress newRange = new CellRangeAddress(oldRange .getFirstRow(), oldRange.getLastRow(), oldRange .getFirstColumn(), oldRange.getLastColumn()); if (oldRange.getFirstRow() >= pStartRow && oldRange.getLastRow() <= pEndRow) { targetRowFrom = oldRange.getFirstRow() - pStartRow + pPosition; targetRowTo = oldRange.getLastRow() - pStartRow + pPosition; oldRange.setFirstRow(targetRowFrom); oldRange.setLastRow(targetRowTo); targetSheet.addMergedRegion(oldRange); sourceSheet.addMergedRegion(newRange); } } // 设置列宽 for (i = pStartRow; i <= pEndRow; i++) { sourceRow = sourceSheet.getRow(i); if (sourceRow != null) { for (j = sourceRow.getLastCellNum(); j > sourceRow.getFirstCellNum(); j--) { targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j)); targetSheet.setColumnHidden(j, false); } break; } } // 拷贝行并填充数据 for (; i <= pEndRow; i++) { sourceRow = sourceSheet.getRow(i); if (sourceRow == null) { continue; } targetRow = targetSheet.createRow(i - pStartRow + pPosition); targetRow.setHeight(sourceRow.getHeight()); for (j = sourceRow.getFirstCellNum(); j <= sourceRow.getPhysicalNumberOfCells(); j++) { sourceCell = sourceRow.getCell(j); if (sourceCell == null) { continue; } targetCell = targetRow.createCell(j); //样式的设置 HSSFCellStyle cStyle = destWorkBook.createCellStyle(); cStyle.cloneStyleFrom(sourceCell.getCellStyle()); targetCell.setCellStyle(cStyle); cType = sourceCell.getCellType(); targetCell.setCellType(cType); switch (cType) { case HSSFCell.CELL_TYPE_BOOLEAN: targetCell.setCellValue(sourceCell.getBooleanCellValue()); // System.out.println("--------TYPE_BOOLEAN:" + targetCell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_ERROR: targetCell.setCellErrorValue(sourceCell.getErrorCellValue()); // System.out.println("--------TYPE_ERROR:" + targetCell.getErrorCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: // parseFormula这个函数的用途在后面说明 targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula())); // System.out.println("--------TYPE_FORMULA:" + targetCell.getCellFormula()); break; case HSSFCell.CELL_TYPE_NUMERIC: targetCell.setCellValue(sourceCell.getNumericCellValue()); // System.out.println("--------TYPE_NUMERIC:" + targetCell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: targetCell.setCellValue(sourceCell.getRichStringCellValue()); // System.out.println("--------TYPE_STRING:" + i + targetCell.getRichStringCellValue()); break; } } } } /** * 处理公式 * @param pPOIFormula * @return */ private static String parseFormula(String pPOIFormula) { final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$ StringBuffer result = null; int index; result = new StringBuffer(); index = pPOIFormula.indexOf(cstReplaceString); if (index >= 0) { result.append(pPOIFormula.substring(0, index)); result.append(pPOIFormula.substring(index + cstReplaceString.length())); } else { result.append(pPOIFormula); } return result.toString(); }
发表评论
-
oracle按照某一字段里的数字排序
2014-10-21 19:59 1022select * from LSK_SBCAJ t ord ... -
JS onkeydown onenter
2014-10-20 16:53 954html中 onenter不是一个标准的事件。 js 中仿o ... -
Java数组删除指定元素
2014-09-18 11:30 2197package com.zas.util; impo ... -
sql 去重
2014-09-18 10:43 571delete from table t1 where t1.i ... -
linux 干掉所有java进程
2014-08-07 12:31 987ps -ef|grep java|grep -v grep|c ... -
Oracle自带连接池使用(转载收录)
2014-07-31 10:01 1356最近在搞数据迁移:从sql server 迁数据到oracle ... -
html dom jsoup httpclient
2014-07-10 21:45 1048xml dom 对大多数java程序员来说并不陌生,但是htm ... -
Oracle 清库脚本
2014-07-08 22:40 1254清库脚本一份 表dossier_group 的字段Dossi ... -
Java 对象存储到oracle Blob字段
2014-07-08 14:52 1050Java 数据对象在没有持久存储到业务表时,可能需要临时存 ... -
Java 科学计数法数字转字符串
2014-07-08 14:30 1421科学计数法数字转字符串,记录代码,留后使用 double ... -
突破tomcat jsp编译65535行的限制
2014-07-04 17:16 4662使用tomcat时有可能会遇到其对jsp编译行数的限制, ... -
oracle 函数中游标及递归的应用
2014-06-19 17:13 1366在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或 ... -
视频操作类
2014-06-19 17:04 1081接 视频分割项目预研 http://zhuyufufu.i ... -
视频分割项目预研
2014-06-11 16:12 2154由于工作需要,研究下视频切割。 现在的情况:视频切割是重中之 ... -
Java POI Excel 行高自适应
2014-03-28 14:08 15570在Excel处理的过程中,可能有需要用到行高自适应的时候。 ... -
Java POI Excel sheet 合并遇到的问题解决2
2014-03-25 18:03 3167上接 Java POI Excel sheet 合并 http ... -
文档展示:使用iText转换各种图片为PDF
2014-03-23 12:38 2841如题: 下面这段代码可以处理各种格式的图片,代码的出处忘记了 ... -
Java 进程执行外部程序,造成外部程序阻塞的一种原因
2014-03-23 12:06 1422前一阵子在研究文档展示时使用了java进程直接调用外部程序 ... -
Java POI Excel sheet 合并遇到的问题解决
2014-03-23 11:30 5010上接 Java POI Excel sheet http:// ... -
文档展示:IcePDF 将PDF转换为图片
2014-02-11 16:35 4868上接 文档展示:PDFRender 将PDF转换为图片 htt ...
相关推荐
将多个EXCEL文件,每个文件多个sheet,合并为:一个excel多sheet,每个sheet是源excel中多sheet合并,希望可以帮到有需要的朋友
利用POI进行多张Excel表的合并。附源代码。
Poi excel 读取模板, 复制sheet表 表里面对行的复制的整合 如果看了还有不明白的地方,请留言,谢谢!
poi 将多个excel复制到新的excel 的多个sheet页中 并复制所有的样式 包括字体的样式 背景颜色 单元格宽度 等
1. 第一部门:详细介绍POI使用以及完成各种复杂的Excel的导出(动态筛选、多对象数据导出到同一sheet内、动态横向合并单元格以及动态纵向合并单元格等) 2.第二部分:使用EasyExcel导出excel的多种情况的例子介绍...
三、 POI EXCEL文档结构类 。 四、 EXCEL常用操作方法 。 【1、得到Excel常用对象 2、建立Excel常用对象 3、设置sheet名称和单元格内容 4、取得sheet的数目 5、根据index取得sheet对象 6、取得有效的行数 7...
java 导出,导入excel。用户自定义导出模板。模板显示内容用el表达式即可。用户可以定义每一个单元格的显示内容。可以自定义List数据的展示。一个excel的sheet内,可以有多个list的数据循环
【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理
实现Excel简单导出 多重表头导出 多sheet导出 合并单元格导出 带小计合并单元格导出 大数据量导出(多文件、多sheet、zip包、边导出边下载)
一般在导出Excel中,在创建工作表sheet后,初始化的sheet中row都是一行一行的,每个单元格都是最小单位,所以问题1什么时候将单元格合并? 方案:先将数据组装成json格式方便插入Excel时进行遍历,接着以巡检项为每...
POIDemo2.java 如何创建 Sheet 页,导出 Excel POIDemo3.java 创建单元格,并给单元格赋值 POIDemo4.java 时间格式 POIDemo5.java 得到 excel输入流,并循环输出 POIDemo6.java 提取 excel 文本操作 POIDemo7.java ...
Java代码对Excel进行增,删,改。及样式
java的POI操作Excel文件.doc POI_API帮助文档.chm poi-bin-3.9-20121203.tar.gz poi帮助.docx POI中文帮助文档.pdf poi中文教程.doc第一章 POI简介 实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为...