love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          friends

          link

          最新評(píng)論

          POI 復(fù)制excel一行到另外一個(gè)sheet頁(yè)(轉(zhuǎn))

          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;

          import org.apache.poi.hssf.usermodel.HSSFCell;
          import org.apache.poi.hssf.usermodel.HSSFRow;
          import org.apache.poi.hssf.usermodel.HSSFSheet;
          import org.apache.poi.hssf.usermodel.HSSFWorkbook;
          import org.apache.poi.hssf.util.Region;
          import org.apache.poi.poifs.filesystem.POIFSFileSystem;

          public class RowCopy {

           
          /**
            * 
          @param args
            * 
          @throws IOException
            * 
          @throws FileNotFoundException
            
          */


           @SuppressWarnings(
          "deprecation")
           
          public static void main(String[] args) {
            
          try {
             POIFSFileSystem fs 
          = new POIFSFileSystem(new FileInputStream(
               
          "exlsample.xls"));
             HSSFWorkbook wb 
          = new HSSFWorkbook(fs);

          //source ,target 為,源sheet 頁(yè)和目標(biāo)sheet頁(yè),
             copyRows(wb, "source""target"3420);
             FileOutputStream fileOut 
          = new FileOutputStream("exlsample.xls");
             wb.write(fileOut);
             fileOut.flush();
             fileOut.close();
             System.out.println(
          "Operation finished");
            }
           catch (Exception e) {
             e.printStackTrace();
            }

           }


           
          public static void copyRows(HSSFWorkbook wb, String pSourceSheetName,
             String pTargetSheetName, 
          int pStartRow, int pEndRow, int pPosition) {
            HSSFRow sourceRow 
          = null;
            HSSFRow targetRow 
          = null;
            HSSFCell sourceCell 
          = null;
            HSSFCell targetCell 
          = null;
            HSSFSheet sourceSheet 
          = null;
            HSSFSheet targetSheet 
          = null;
            Region region 
          = null;
            
          int cType;
            
          int i;
            
          short j;
            
          int targetRowFrom;
            
          int targetRowTo;

            
          if ((pStartRow == -1|| (pEndRow == -1)) {
             
          return;
            }

            sourceSheet 
          = wb.getSheet(pSourceSheetName);
            targetSheet 
          = wb.getSheet(pTargetSheetName);
            
          // 拷貝合并的單元格
            for (i = 0; i < sourceSheet.getNumMergedRegions(); i++{
             region 
          = sourceSheet.getMergedRegionAt(i);
             
          if ((region.getRowFrom() >= pStartRow)
               
          && (region.getRowTo() <= pEndRow)) {
              targetRowFrom 
          = region.getRowFrom() - pStartRow + pPosition;
              targetRowTo 
          = region.getRowTo() - pStartRow + pPosition;
              region.setRowFrom(targetRowFrom);
              region.setRowTo(targetRowTo);
              targetSheet.addMergedRegion(region);
             }

            }

            
          // 設(shè)置列寬
            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;
             }

            }

            
          // 拷貝行并填充數(shù)據(jù)
            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);
              targetCell.setEncoding(sourceCell.getEncoding());
              targetCell.setCellStyle(sourceCell.getCellStyle());
              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這個(gè)函數(shù)的用途在后面說(shuō)明
               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;
              }


             }


            }


           }


           
          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();
           }


          }


          posted on 2007-11-14 16:51 liaojiyong 閱讀(8331) 評(píng)論(1)  編輯  收藏 所屬分類: POI

          評(píng)論

          # re: POI 復(fù)制excel一行到另外一個(gè)sheet頁(yè)(轉(zhuǎn))[未登錄](méi) 2011-12-26 16:02 zz

          請(qǐng)問(wèn)pPosition參數(shù)是什么?  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 乌拉特后旗| 武陟县| 凤山县| 鸡泽县| 鹤庆县| 梓潼县| 绥化市| 墨竹工卡县| 犍为县| 临清市| 隆回县| 元谋县| 盐山县| 颍上县| 洛宁县| 临清市| 潜江市| 陆良县| 罗田县| 奉新县| 中江县| 图木舒克市| 高密市| 安远县| 离岛区| 沅江市| 临西县| 荔波县| 淮安市| 高台县| 麻江县| 大宁县| 水城县| 黄骅市| 安乡县| 黑水县| 柳林县| 浮山县| 陈巴尔虎旗| 渝中区| 永福县|