poi操作excel,复制sheet,复制行,复制单元格
2013-03-20 14:59
1101 查看
项目中,我们经常使用Poi来操作excel,但是经常碰到一个不方便的地方,不如最简单常用的,在两个excel之间复制sheet,复制行,复制单元格等。
我这里是最近刚做的一个简单封装。不是很好,必须始终传过去一个“目标workbook“的引用,留下个mark!
源码如下:
我这里是最近刚做的一个简单封装。不是很好,必须始终传过去一个“目标workbook“的引用,留下个mark!
源码如下:
public class POIUtils { // /** // * 把一个excel中的cellstyletable复制到另一个excel,这里会报错,不能用这种方法,不明白呀????? // * @param fromBook // * @param toBook // */ // public static void copyBookCellStyle(HSSFWorkbook fromBook,HSSFWorkbook toBook){ // for(short i=0;i<fromBook.getNumCellStyles();i++){ // HSSFCellStyle fromStyle=fromBook.getCellStyleAt(i); // HSSFCellStyle toStyle=toBook.getCellStyleAt(i); // if(toStyle==null){ // toStyle=toBook.createCellStyle(); // } // copyCellStyle(fromStyle,toStyle); // } // } /** * 复制一个单元格样式到目的单元格样式 * @param fromStyle * @param toStyle */ public static void copyCellStyle(HSSFCellStyle fromStyle, HSSFCellStyle toStyle) { toStyle.setAlignment(fromStyle.getAlignment()); //边框和边框颜色 toStyle.setBorderBottom(fromStyle.getBorderBottom()); toStyle.setBorderLeft(fromStyle.getBorderLeft()); toStyle.setBorderRight(fromStyle.getBorderRight()); toStyle.setBorderTop(fromStyle.getBorderTop()); toStyle.setTopBorderColor(fromStyle.getTopBorderColor()); toStyle.setBottomBorderColor(fromStyle.getBottomBorderColor()); toStyle.setRightBorderColor(fromStyle.getRightBorderColor()); toStyle.setLeftBorderColor(fromStyle.getLeftBorderColor()); //背景和前景 toStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor()); toStyle.setFillForegroundColor(fromStyle.getFillForegroundColor()); toStyle.setDataFormat(fromStyle.getDataFormat()); toStyle.setFillPattern(fromStyle.getFillPattern()); // toStyle.setFont(fromStyle.getFont(null)); toStyle.setHidden(fromStyle.getHidden()); toStyle.setIndention(fromStyle.getIndention());//首行缩进 toStyle.setLocked(fromStyle.getLocked()); toStyle.setRotation(fromStyle.getRotation());//旋转 toStyle.setVerticalAlignment(fromStyle.getVerticalAlignment()); toStyle.setWrapText(fromStyle.getWrapText()); } /** * Sheet复制 * @param fromSheet * @param toSheet * @param copyValueFlag */ public static void copySheet(HSSFWorkbook wb,HSSFSheet fromSheet, HSSFSheet toSheet, boolean copyValueFlag) { //合并区域处理 mergerRegion(fromSheet, toSheet); for (Iterator rowIt = fromSheet.rowIterator(); rowIt.hasNext();) { HSSFRow tmpRow = (HSSFRow) rowIt.next(); HSSFRow newRow = toSheet.createRow(tmpRow.getRowNum()); //行复制 copyRow(wb,tmpRow,newRow,copyValueFlag); } } /** * 行复制功能 * @param fromRow * @param toRow */ public static void copyRow(HSSFWorkbook wb,HSSFRow fromRow,HSSFRow toRow,boolean copyValueFlag){ for (Iterator cellIt = fromRow.cellIterator(); cellIt.hasNext();) { HSSFCell tmpCell = (HSSFCell) cellIt.next(); HSSFCell newCell = toRow.createCell(tmpCell.getCellNum()); copyCell(wb,tmpCell, newCell, copyValueFlag); } } /** * 复制原有sheet的合并单元格到新创建的sheet * * @param sheetCreat 新创建sheet * @param sheet 原有的sheet */ public static void mergerRegion(HSSFSheet fromSheet, HSSFSheet toSheet) { int sheetMergerCount = fromSheet.getNumMergedRegions(); for (int i = 0; i < sheetMergerCount; i++) { Region mergedRegionAt = fromSheet.getMergedRegionAt(i); toSheet.addMergedRegion(mergedRegionAt); } } /** * 复制单元格 * * @param srcCell * @param distCell * @param copyValueFlag * true则连同cell的内容一起复制 */ public static void copyCell(HSSFWorkbook wb,HSSFCell srcCell, HSSFCell distCell, boolean copyValueFlag) { HSSFCellStyle newstyle=wb.createCellStyle(); copyCellStyle(srcCell.getCellStyle(), newstyle); distCell.setEncoding(srcCell.getEncoding()); //样式 distCell.setCellStyle(newstyle); //评论 if (srcCell.getCellComment() != null) { distCell.setCellComment(srcCell.getCellComment()); } // 不同数据类型处理 int srcCellType = srcCell.getCellType(); distCell.setCellType(srcCellType); if (copyValueFlag) { if (srcCellType == HSSFCell.CELL_TYPE_NUMERIC) { if (HSSFDateUtil.isCellDateFormatted(srcCell)) { distCell.setCellValue(srcCell.getDateCellValue()); } else { distCell.setCellValue(srcCell.getNumericCellValue()); } } else if (srcCellType == HSSFCell.CELL_TYPE_STRING) { distCell.setCellValue(srcCell.getRichStringCellValue()); } else if (srcCellType == HSSFCell.CELL_TYPE_BLANK) { // nothing21 } else if (srcCellType == HSSFCell.CELL_TYPE_BOOLEAN) { distCell.setCellValue(srcCell.getBooleanCellValue()); } else if (srcCellType == HSSFCell.CELL_TYPE_ERROR) { distCell.setCellErrorValue(srcCell.getErrorCellValue()); } else if (srcCellType == HSSFCell.CELL_TYPE_FORMULA) { distCell.setCellFormula(srcCell.getCellFormula()); } else { // nothing29 } } } }
相关文章推荐
- poi操作excel,复制sheet,复制行,复制单元格 .
- 关于C#操作Excel,复制Sheet的记录
- java poi操作excel文件 (新建Excel文件 添加行列、单元格
- 使用POI操作Excel:Sheet拷贝
- POI-----POI操作Excel-3、单元格
- POI中可能会用到一些需要设置EXCEL单元格格式的操作小结
- java poi操作excel 添加 锁定单元格保护
- poi操作excel动态创建多个sheet
- POI中可能会用到一些需要设置EXCEL单元格格式的操作小结
- 关于POI设置SHEET名称以及合并单元格,复制单元格方法
- 自己写的POIUtil,主要解决从不同的HSSFWorkbook复制sheet以及根据单元格插入图片等
- poi开源jar包操作excel时读取单元格的标准方法
- VC 操作Excel sheet复制、重命名
- Web前端:POI操作EXCEL出现的单元格格式丢失问题的解决方案
- java poi 操作excel,xssf 读excel 2007,将某些单元格为固定值
- POI操作Excel:隐藏、删除Excel中指定的Sheet
- delphi 操作excel复制sheet
- POI中可能会用到一些需要设置EXCEL单元格格式的操作小结
- POI操作Excel:隐藏、删除Excel中指定的Sheet
- Java-POI操作excel清除单元格分行字符