poi excel 插入行

原文:http://ujoc.iteye.com/blog/697027

 

  1. 关于Excel中插入

    poi提供的Class HSSFSheet 中的函数shiftRows可以把某区域的行移动,但是移动后剩下的区域却为空了。以下程序实现了按照原来的形式插入行的效果。而不是单单只是移动。

     

    Java代码    收藏代码
    1. import java.io.FileInputStream;  
    2. import java.io.FileNotFoundException;  
    3. import java.io.FileOutputStream;  
    4. import java.io.IOException;  
    5. import org.apache.poi.hssf.usermodel.HSSFCell;  
    6. import org.apache.poi.hssf.usermodel.HSSFRow;  
    7. import org.apache.poi.hssf.usermodel.HSSFSheet;  
    8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
    9.   
    10. /** 
    11.  * 
    12.  * @author ZhangPuSheng 
    13.  */  
    14. public class Main {  
    15.   
    16.     /** 
    17.      * @param args the command line arguments 
    18.      */  
    19.     public static void main(String[] args) throws FileNotFoundException, IOException {  
    20.         // TODO code application logic here  
    21.         FileInputStream myxls = new FileInputStream("workbook.xls");  
    22.         HSSFWorkbook wb = new HSSFWorkbook(myxls);  
    23.         HSSFSheet sheet= wb.getSheetAt(0);  
    24.         int startRow=2;  
    25.         int rows =10;  
    26.   
    27.         insertRow(sheet,startRow,rows);  
    28.          
    29.         FileOutputStream myxlsout = new FileOutputStream("workbook.xls");  
    30.         wb.write(myxlsout);  
    31.         myxlsout.close();  
    32.           
    33.     }  
    34.   
    35.     private static void insertRow(HSSFSheet sheet, int startRow, int rows) {  
    36.         sheet.shiftRows(startRow, sheet.getLastRowNum(), rows, truefalse);  
    37.   
    38.   
    39.         for (int i = 0; i < rows; i++) {  
    40.             HSSFRow sourceRow = null;//原始位置  
    41.             HSSFRow targetRow = null;//移动后位置  
    42.             HSSFCell sourceCell = null;  
    43.             HSSFCell targetCell = null;  
    44.             sourceRow = sheet.createRow(startRow);  
    45.             targetRow = sheet.getRow(startRow + rows);  
    46.             sourceRow.setHeight(targetRow.getHeight());  
    47.   
    48.             for (int m = targetRow.getFirstCellNum(); m < targetRow.getPhysicalNumberOfCells(); m++) {  
    49.                 sourceCell = sourceRow.createCell(m);  
    50.                 targetCell = targetRow.getCell(m);  
    51.                 sourceCell.setCellStyle(targetCell.getCellStyle());  
    52.                 sourceCell.setCellType(targetCell.getCellType());  
    53.             }  
    54.             startRow++;  
    55.         }  
    56.   
    57.     }  
    58.   
    59.   
    60. }  

     注意:

    sourceRow = sheet.createRow(startRow);和sourceCell = sourceRow.createCell(m);这两行很关键,

    必须用create...,而不能用get...。因为被shiftRows后的区域是空,用get只能得到null,并且抛出异常。

你可能感兴趣的:(Excel)