Apache POI xls column Remove

前端 未结 5 488
孤城傲影
孤城傲影 2020-12-17 17:47

I don\'t find how to remove a column with the Apache POI API.
I would appreciate a sample code or help on this point.

5条回答
  •  爱一瞬间的悲伤
    2020-12-17 18:12

    Alan Williamson on the mailing list wrote a small helper for column removal

    package org.alanwilliamson.openbd.plugin.spreadsheet;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    
    
    /*
     * Helper functions to aid in the management of sheets
     */
    public class SheetUtility extends Object {
    
    
        /**
         * Given a sheet, this method deletes a column from a sheet and moves
         * all the columns to the right of it to the left one cell.
         * 
         * Note, this method will not update any formula references.
         * 
         * @param sheet
         * @param column
         */
        public static void deleteColumn( Sheet sheet, int columnToDelete ){
            int maxColumn = 0;
            for ( int r=0; r < sheet.getLastRowNum()+1; r++ ){
                Row row = sheet.getRow( r );
    
                // if no row exists here; then nothing to do; next!
                if ( row == null )
                    continue;
    
                // if the row doesn't have this many columns then we are good; next!
                int lastColumn = row.getLastCellNum();
                if ( lastColumn > maxColumn )
                    maxColumn = lastColumn;
    
                if ( lastColumn < columnToDelete )
                    continue;
    
                for ( int x=columnToDelete+1; x < lastColumn + 1; x++ ){
                    Cell oldCell    = row.getCell(x-1);
                    if ( oldCell != null )
                        row.removeCell( oldCell );
    
                    Cell nextCell   = row.getCell( x );
                    if ( nextCell != null ){
                        Cell newCell    = row.createCell( x-1, nextCell.getCellType() );
                        cloneCell(newCell, nextCell);
                    }
                }
            }
    
    
            // Adjust the column widths
            for ( int c=0; c < maxColumn; c++ ){
                sheet.setColumnWidth( c, sheet.getColumnWidth(c+1) );
            }
        }
    
    
        /*
         * Takes an existing Cell and merges all the styles and forumla
         * into the new one
         */
        private static void cloneCell( Cell cNew, Cell cOld ){
            cNew.setCellComment( cOld.getCellComment() );
            cNew.setCellStyle( cOld.getCellStyle() );
    
            switch ( cNew.getCellType() ){
                case Cell.CELL_TYPE_BOOLEAN:{
                    cNew.setCellValue( cOld.getBooleanCellValue() );
                    break;
                }
                case Cell.CELL_TYPE_NUMERIC:{
                    cNew.setCellValue( cOld.getNumericCellValue() );
                    break;
                }
                case Cell.CELL_TYPE_STRING:{
                    cNew.setCellValue( cOld.getStringCellValue() );
                    break;
                }
                case Cell.CELL_TYPE_ERROR:{
                    cNew.setCellValue( cOld.getErrorCellValue() );
                    break;
                }
                case Cell.CELL_TYPE_FORMULA:{
                    cNew.setCellFormula( cOld.getCellFormula() );
                    break;
                }
            }
    
        }
    }
    

提交回复
热议问题