如何将现有列数据和格式复制到Apache POI中的下一列,并将下一列移到右侧。
我试过这个。 我想我的代码就是这个......
XSSFCell oldCell = worksheet.getRow(0).getCell(1);
XSSFCell newCell = worksheet.getRow(0).getCell(2);
if(styleMap != null) {
if(oldCell.getSheet().getWorkbook() == newCell.getSheet().getWorkbook()){
newCell.setCellStyle(oldCell.getCellStyle());
} else{
int stHashCode = oldCell.getCellStyle().hashCode();
XSSFCellStyle newCellStyle = styleMap.get(stHashCode);
if(newCellStyle == null){
newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
styleMap.put(stHashCode, newCellStyle);
}
newCell.setCellStyle(newCellStyle);
}
}
我能够将值从旧单元格复制到新单元格,但不会将现有列向右移动。
提前感谢您的帮助。
答案 0 :(得分:3)
我几年没有使用过POI,但是如果我没记错的话,你必须连续遍历所有单元格并更新每个Cell
中的列号,使其成为你想要的。没有神奇的“插入列”方法。请记住从右到左执行此操作以避免完全破坏工作表: - )
答案 1 :(得分:1)
你可以参考这个[链接] https://poi.apache.org/apidocs/4.0/org/apache/poi/ss/usermodel/Sheet.html#shiftColumns-int-int-int-
想象表已经创建,
只需使用此 worksheet.shiftColumns(int startcol, int lastcol, int cols_to_be_moved);
worksheet.shiftColumns(0,13,1)
注意:
答案 2 :(得分:0)
我无法相信它不在API中。
您可以使用这两个方便的功能。我将在稍后尝试将PR发布到Apache POI。
void shiftColumns(Row row, int startingIndex, int shiftCount) {
for (int i = row.getPhysicalNumberOfCells()-1;i>=startingIndex;i--){
Cell oldCell = row.getCell(i);
Cell newCell = row.createCell(i + shiftCount, oldCell.getCellTypeEnum());
cloneCellValue(oldCell,newCell);
}
}
void cloneCellValue(Cell oldCell, Cell newCell) { //TODO test it
switch (oldCell.getCellTypeEnum()) {
case STRING:
newCell.setCellValue(oldCell.getStringCellValue());
break;
case NUMERIC:
newCell.setCellValue(oldCell.getNumericCellValue());
break;
case BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case FORMULA:
newCell.setCellFormula(oldCell.getCellFormula());
break;
case ERROR:
newCell.setCellErrorValue(oldCell.getErrorCellValue());
case BLANK:
case _NONE:
break;
}
}