Как справиться с пустой или пустой ячейкой в ​​файле Excel, используя Apache Poi - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время я работаю над концепцией копирования данных из одного листа Excel в другую рабочую книгу, и если пустые ячейки существуют, то их следует скопировать в выходной файл.ниже приведен скриншот для входного файла:
enter image description here

вот мой код для выполнения функции копирования

import org.apache.poi.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.examples.CreateCell;

import java.io.*;
import java.util.*;
public class openwb_test {


    public static void main(String[] args) throws Exception {

        File inputFile=new File("input.xlsx");
        FileInputStream fis=new FileInputStream(inputFile);
        XSSFWorkbook inputWorkbook=new XSSFWorkbook(fis);
        int inputSheetCount=inputWorkbook.getNumberOfSheets();
        System.out.println("Input sheetCount: "+inputSheetCount);


        File outputFile=new File("output.xlsx");
        FileOutputStream fos=new FileOutputStream(outputFile);


        XSSFWorkbook outputWorkbook=new XSSFWorkbook();


        for(int i=0;i<inputSheetCount;i++) 
        { 
            XSSFSheet inputSheet=inputWorkbook.getSheetAt(i); 
            String inputSheetName=inputWorkbook.getSheetName(i); 
            XSSFSheet outputSheet=outputWorkbook.createSheet(inputSheetName); 


            copySheet(inputSheet,outputSheet); 
        }


        outputWorkbook.write(fos); 

        fos.close(); 

        outputWorkbook.close();
    }

    public static void copySheet(XSSFSheet inputSheet,XSSFSheet outputSheet) 
    { 
        int rowCount=inputSheet.getLastRowNum(); 
        System.out.println(rowCount+" rows in inputsheet "+inputSheet.getSheetName()); 

        int currentRowIndex=0; if(rowCount>0)
        {
            Iterator<Row> rowIterator=inputSheet.iterator();
            //XSSFRow row=(XSSFRow) rowIterator.next();
            while(rowIterator.hasNext())
            {
                int currentCellIndex=0;
                Iterator<Cell> cellIterator=((XSSFRow) rowIterator.next()).cellIterator();
                while(cellIterator.hasNext())
                {

                    String cellData=cellIterator.next().toString();


                    if(currentCellIndex==0 )
                        outputSheet.createRow(currentRowIndex).createCell(currentCellIndex).setCellValue(cellData);
                    else
                        outputSheet.getRow(currentRowIndex).createCell(currentCellIndex).setCellValue(cellData);



                    currentCellIndex++; 
                } 

                currentRowIndex++;
                System.out.println(currentRowIndex);
            }
            System.out.println((currentRowIndex-1)+" rows added to outputsheet "+outputSheet.getSheetName());
            System.out.println();
        }
    }




}

Но если я запускаю приведенный выше кодрезультаты будут скопированы, но там, где есть пустые ячейки, код будет обрезан.Например, ниже приведен фрагмент вывода:
enter image description here

Может кто-нибудь подсказать мне, как мы можем обрабатывать пустую ячейку в этом сценарии, так как я ожидаю, что данные входного файла должны быть скопированыкак он включает пустые ячейки в выходной файл

1 Ответ

0 голосов
/ 30 мая 2019

У метода getCell есть второй аргумент, который задает политику для обработки пустых ячеек.

Используйте его в хорошем старом цикле for:

    for (int i=0; i<row.getLastCellNum(); i++) {
        Cell cell = row.getCell(i, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
        if (cell == null) {
            // ...
        } else {
            // ...
        }
    }
...