Чтение данных из файла Excel, который имеет ошибку - PullRequest
0 голосов
/ 04 ноября 2019

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

Код:

private Workbook workbook;
    public Map<String,String> readMaster(Properties properties) {
    Map<String,String> masterMap = new HashMap<String, String>();
     try {
            File masterFile = new File(properties.get(ReportConstants.DCS_INPUT_PATH) + ReportConstants.DCS_MASTER_FILE);
            if(!masterFile.exists()){
                throw new FileNotFoundException();
            }else{
            FileInputStream excelFile = new FileInputStream(masterFile);
            workbook = new XSSFWorkbook(excelFile);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = datatypeSheet.iterator();
            int headItr = 0;
            while (iterator.hasNext()) {
                String key="",value="";
                Row currentRow = iterator.next();
                Iterator<Cell> cellIterator = currentRow.iterator();
                int rowItr = 0;
                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    //Some logic
}
masterMap.put(key, value);
                    }
                }

             for (Map.Entry<String,String> entry : masterMap.entrySet()){  
                    System.out.println("Key = " + entry.getKey() + 
                                     ", Value = " + entry.getValue()); 
            } 
            if(!masterMap.isEmpty()){
                /*FileUtility.checkDestinationDir(""+properties.get(ReportConstants.DCS_ARCHIVE_PATH));
                FileUtility.moveFile(properties.get(ReportConstants.DCS_INPUT_PATH) + ReportConstants.DCS_MASTER_FILE,
                        properties.get(ReportConstants.DCS_ARCHIVE_PATH)+ReportConstants.DCS_MASTER_FILE+FileUtility.getArchivedPattern());*/
            }else{
                EmailService.sendExceptionMail(properties.getProperty(ReportConstants.EMAIL_EXCEPTION_TO),
                        properties.getProperty(ReportConstants.EMAIL_EXCEPTION_CC),
                                " No data in master file ",
                                "DCS : Empty Master File");
                throw new Exception("No data in master file");
            } 

        } catch (FileNotFoundException e) {
            log.error("File not present while reading Master file ",e);
            EmailService.sendExceptionMail(properties.getProperty(ReportConstants.EMAIL_EXCEPTION_TO),
                    properties.getProperty(ReportConstants.EMAIL_EXCEPTION_CC),
                            " File not present while reading Master file \n\n"+e.getMessage(),
                            "DCS Report : Master File");
        } catch (IOException e) {
            log.error("Input/Output Exception occured while reading Master file ",e);
            EmailService.sendExceptionMail(properties.getProperty(ReportConstants.EMAIL_EXCEPTION_TO),
                    properties.getProperty(ReportConstants.EMAIL_EXCEPTION_CC),
                            " Input/Output Exception occured while reading Master file \n\n"+e.getMessage(),
                            "DCS Report : Master File");
        } catch (Exception e) {
            log.error("Genric exception occured while reading Master file ",e);
            EmailService.sendExceptionMail(properties.getProperty(ReportConstants.EMAIL_EXCEPTION_TO),
                    properties.getProperty(ReportConstants.EMAIL_EXCEPTION_CC),
                            "Exception Occurred : \n\n"+e.getMessage(),
                            "DCS Report : Master File");
        }
     finally{
         try {
                if (null!=excelFile) {
                    excelFile.close();
                }
                if(null!=workbook){
                    workbook.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }



 }
         return masterMap;
    }

Далее я сохраняю детали на картуи вернуть его для дальнейшего использования. Я использую:

  • poi-3.13.jar
  • java 1.7

Редактировать 1: Добавлен мой завершенный метод, надеюсь, он поможет повторить проблему.

Редактировать 2: После нажатия «Да» во всплывающем сообщении об ошибке и его сохранения программа работает нормально.

Есть ли способ справиться с этим. Пожалуйста, предложите

1 Ответ

0 голосов
/ 11 ноября 2019

Для упомянутого файла выше, я использую приведенный ниже фрагмент для чтения файла, он возвращает StreamingReader объект. он может использоваться далее так же, как Sheet.

Код

import com.monitorjbl.xlsx.StreamingReader;

public static StreamingReader getExcelSheet(File excelFile, String sheetName) throws Exception{
        StreamingReader reader = null;
        reader = StreamingReader.builder()
                .rowCacheSize(100) // number of rows to keep in memory (defaults to 10)
                .bufferSize(4096) // buffer size to use when reading InputStream to file (defaults to 1024)
                .sheetName(sheetName) // index of sheet to use (defaults to 0)
                .read(excelFile);
        return reader;
    }

StreamingReader sheet1 = FileUtility.getExcelSheet(excelFile, sheetName);   
for (Row r : sheet1){

    // iterate row here

    for (Cell cell : r) {

    //iterate cells here

    }

}

Надеюсь, эта помощь кому-то поможет.

...