问题
My excel sheet contains different regions on the same sheet like:
region1: region2:
John 2 A 1
John 1 B 2
Sue 1 C 3
Sue 2 D 4
Alice 5 E 5
Bob 1 F 6
I want to add new items into one of these regions without affecting the other regions. I tried using rowShift()
method but it is also deleting the complete rows. Is there any way that can shift the specific cells down and can insert rows into the specific regions like this: In my given example I want to add one more row in region1 (also retaining all old rows) and it will become:
region1: region2:
newval newval A 1
John 2 B 2
John 1 C 3
Sue 1 D 4
Sue 2 E 5
Alice 5 F 6
Bob 1
回答1:
If the above issue still persisting, I can give you a method for the same.
public static void shiftCells(int startCellNo, int endCellNo, int shiftRowsBy, Sheet sheet){
int lastRowNum = sheet.getLastRowNum();
System.out.println(lastRowNum); //=7
// int rowNumAfterAdding = lastRowNum+shiftRowsBy;
for(int rowNum=lastRowNum;rowNum>0;rowNum--){
Row rowNew;
if(sheet.getRow((int)rowNum+shiftRowsBy)==null){
rowNew = sheet.createRow((int)rowNum+shiftRowsBy);
}
rowNew = sheet.getRow((int)rowNum+shiftRowsBy);
Row rowOld = sheet.getRow(rowNum);
System.out.println("RowNew is "+rowNum+" and Row Old is "+(int)(rowNum+shiftRowsBy));
System.out.println("startCellNo = "+startCellNo+" endCellNo = "+endCellNo+" shiftRowBy = "+shiftRowsBy);
for(int cellNo=startCellNo; cellNo<=endCellNo;cellNo++){
rowNew.createCell(cellNo).setCellValue(rowOld.getCell(cellNo).getStringCellValue().toString());
rowOld.getCell(cellNo).setCellValue("");
System.out.println("working on " +cellNo);
}
}
}
来源:https://stackoverflow.com/questions/3656176/how-to-shift-specific-cells-using-apache-poi