Java Apache POI空白单元格

时间:2016-11-11 20:40:21

标签: java excel eclipse apache-poi

我是Apache POI的新手,但不是Java新手。我一直在尝试将数据从一个excel文件转换为另一个,将任何分隔符数据更改为新单元格。尽管大多数新数据都是正确的,但有一些例外情况并未遵循空白单元格的规则。 这是输入文件https://ufile.io/bce15 这是输出文件https://ufile.io/55020

在下面的图片中,记录4和5不符合规则,我无法弄清楚为什么!!

enter image description here

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;


public class testWrite {
public static void main( String [] args ) {             
    int rowNums = 1;
    try {

        FileInputStream file = new FileInputStream(new      File("ExceptionDataDummy.xlsx"));;
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = wb.getSheetAt(0);           
        String filename = "ExceptionDataResult.xlsx" ;
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet1 = workbook.createSheet("FirstSheet");             
        Iterator<Row> rows = sheet.rowIterator();            
        int col = 0;
        while( rows.hasNext() ) {  
            XSSFRow row = (XSSFRow) rows.next();
            XSSFRow row1 = sheet1.createRow((short)rowNums);
            System.out.println("\n");
            Iterator<Cell> cells = row.cellIterator();
            while( cells.hasNext() ) {

                XSSFCell cell = (XSSFCell) cells.next();
                if(XSSFCell.CELL_TYPE_NUMERIC==cell.getCellType()) {                        
                    row1.createCell(col).setCellValue(cell.getNumericCellValue());
                    col++;                   
                }
                else
                if(XSSFCell.CELL_TYPE_STRING==cell.getCellType()){
                    String contents =  cell.getStringCellValue();
                    String[] items = contents.split(",");                       
                    for (String item : items) {                         
                        row1.createCell(col).setCellValue(item);
                        col++;                          
                    }
                }
                else
                    if(XSSFCell.CELL_TYPE_BOOLEAN==cell.getCellType()) {
                        row1.createCell(col).setCellValue(cell.getBooleanCellValue());
                        col++;                          
                    }
                    else
                        if((cell.equals("")) || (XSSFCell.CELL_TYPE_BLANK==cell.getCellType()) || (cell == null)) {

                            cell.setCellType(Cell.CELL_TYPE_BLANK);
                            col++;                              
                        }
                            else {                                  
                       System.out.print("Unknown cell type");
                            }
            }
            rowNums++;
            col=0;               
        }
        FileOutputStream fileOut = new FileOutputStream(filename);
        workbook.write(fileOut);
        fileOut.close();
        System.out.println("Your excel file has been generated!");
        wb.close();
        workbook.close();
    } catch ( IOException ex ) {
        ex.printStackTrace();
    }                   
}
}

1 个答案:

答案 0 :(得分:2)

在您的代码中,您正在使用cellIterator

../DataNFT/reference_1

cellIterator不包含null的单元格。

您必须从第一个单元格开始循环到最后一个单元格,然后检查单元格是否为空,而不是使用cellIterator。

您可以参考以下示例代码 -

Iterator<Cell> cells = row.cellIterator();