shiftRows public void shiftRows(int startRow, int endRow, int n)
Shifts rows between startRow and endRow n number of rows. If you use a negative number, it will shift rows up. Code ensures that rows don't wrap around. Calls shiftRows(startRow, endRow, n, false, false); Additionally shifts merged regions that are completely defined in these rows (ie. merged 2 cells on a row to be shifted). Parameters: startRow - the row to start shifting endRow - the row to end shifting n - the number of rows to shift指定要移动的行的范围从「startRow」行到「endRow」行。「n」如果是正数就往下移动,如果为负,就往上移动。
示例程序
按下图准备一个Excel文件。import java.io.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; public class POISample{ public static void main(String[] args){ FileInputStream in = null; HSSFWorkbook workbook = null; try{ in = new FileInputStream("sample.xls"); POIFSFileSystem fs = new POIFSFileSystem(in); workbook = new HSSFWorkbook(fs); }catch(IOException e){ System.out.println(e.toString()); }finally{ try{ in.close(); }catch (IOException e){ System.out.println(e.toString()); } } HSSFSheet sheet = workbook.getSheetAt(0); sheet.shiftRows(1, 2, 2); FileOutputStream out = null; try{ out = new FileOutputStream("sample2.xls"); workbook.write(out); }catch(IOException e){ System.out.println(e.toString()); }finally{ try { out.close(); }catch(IOException e){ System.out.println(e.toString()); } } } }打开新建的Sample2.xls文件看看。
从上图可以看出,第二行和第三行的内容已经移动到第四行和第五行,并覆盖原第四行和第五行的内容。但第二行到第五行的行高却维持原样没有变化。
再来看看有没有办法可以既移动内容,又可以移动行高呢?从帮助文档里可以看出,对于「shiftRows」方法,还有另外一种用法。
shiftRows public void shiftRows(int startRow, int endRow, int n, boolean copyRowHeight, boolean resetOriginalRowHeight)
Shifts rows between startRow and endRow n number of rows. If you use a negative number, it will shift rows up. Code ensures that rows don't wrap around Additionally shifts merged regions that are completely defined in these rows (ie. merged 2 cells on a row to be shifted). TODO Might want to add bounds checking here Parameters: startRow - the row to start shifting endRow - the row to end shifting n - the number of rows to shift copyRowHeight - whether to copy the row height during the shift resetOriginalRowHeight - whether to set the original row's height to the default前面3个参数和之前一样。如要使行高也一起移动的话,设置「copyRowHeight」参数为「true」。
还有,移动后,原来的行是保留原行高不变还是恢复到默认行高呢?可以设置「resetOriginalRowHeight」参数。为「true」时,则可以恢复到默认行高。反之则保留原行高不变。
示例程序
import java.io.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; public class POISample{ public static void main(String[] args){ FileInputStream in = null; HSSFWorkbook workbook = null; try{ in = new FileInputStream("sample.xls"); POIFSFileSystem fs = new POIFSFileSystem(in); workbook = new HSSFWorkbook(fs); }catch(IOException e){ System.out.println(e.toString()); }finally{ try{ in.close(); }catch (IOException e){ System.out.println(e.toString()); } } HSSFSheet sheet = workbook.getSheetAt(0); sheet.shiftRows(1, 2, 2, true, true); FileOutputStream out = null; try{ out = new FileOutputStream("sample2.xls"); workbook.write(out); }catch(IOException e){ System.out.println(e.toString()); }finally{ try { out.close(); }catch(IOException e){ System.out.println(e.toString()); } } } }再打开新生成的Sample2.xls文件来看看。
从上图可以看出,移动后,原行高也被移动了,而原行则恢复到默认行高。
没有评论:
发表评论