love fish大鵬一曰同風起,扶搖直上九萬里

          常用鏈接

          統計

          積分與排名

          friends

          link

          最新評論

          POI 復制excel一行到另外一個sheet頁(轉)

          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 頁和目標sheet頁,
             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);
             }

            }

            
          // 設置列寬
            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);
              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這個函數的用途在后面說明
               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) 評論(1)  編輯  收藏 所屬分類: POI

          評論

          # re: POI 復制excel一行到另外一個sheet頁(轉)[未登錄] 2011-12-26 16:02 zz

          請問pPosition參數是什么?  回復  更多評論   

          主站蜘蛛池模板: 台东市| 东兰县| 余庆县| 儋州市| 万山特区| 汶川县| 沅江市| 宽甸| 平阴县| 呼和浩特市| 嘉兴市| 凉山| 东阳市| 中山市| 改则县| 象山县| 玉环县| 遂昌县| 长沙县| 中牟县| 清新县| 佛冈县| 洛阳市| 武陟县| 东山县| 循化| 望江县| 墨江| 云龙县| 庆云县| 北流市| 通化县| 扎囊县| 信阳市| 靖宇县| 垫江县| 台北县| 南阳市| 罗定市| 且末县| 清流县|