Как исправить «Предоставленные данные, по-видимому, находятся в Office 2007+ XML». - PullRequest
0 голосов
/ 20 октября 2019

Это мой код, который извлекает значение из файла xlsx и печатает его на консоли Eclipse

public class testcode {

    public void readexcel(String filepath, String filename, String sheetname) throws IOException    
    {
        //Create an object of file class to open xlsx file      
        File file = new File(filepath+"\\"+filename);       
        //Create an object of FileInputStream to read an xlsx file
        FileInputStream inputstream = new FileInputStream(file);
        Workbook workbook = null;       
        //Find file extension name by using substring       
        String FileExtensionName = filename.substring(filename.indexOf("."));       
        //Check condition whether file is xlsx or xls       
        if(FileExtensionName.equalsIgnoreCase("xlsx"))
            workbook = new XSSFWorkbook(inputstream);
        else
            workbook = new HSSFWorkbook(inputstream);       
        //Read sheet inside the workbook by its name        
        Sheet sheet =  workbook.getSheet(sheetname);        
        //Find number of rows in sheet

        int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();      
        //Create a loop over all the rows of excel file to read it      
        for(int i = 0; i<rowCount+1;i++)
        {
            Row row = sheet.getRow(i);          
            //Create loop to print cell values in a row         
            for(int j = 0; j<row.getLastCellNum();j++)
            {
                //Print excel value in console                  System.out.println(row.getCell(j).getStringCellValue()+"||");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) throws IOException {        
        testcode objExcelFile = new testcode();
        //Prepare path of excel file   
        String filepath = "C:\\Users\\malfoy\\Desktop";     
        objExcelFile.readexcel(filepath,"testfile.xlsx", "read");       
    }
}

Я использую редакцию Office 2007 и получаю исключение, которое говорит: «Представленные данные выглядят какв XML Office 2007+. Вы вызываете ту часть POI, которая имеет дело с офисными документами OLE2. Вам необходимо вызвать другую часть POI для обработки этих данных (например, XSSF вместо HSSF) "

Какисправить это?

1 Ответ

0 голосов
/ 20 октября 2019

Строка

String FileExtensionName = filename.substring(filename.indexOf("."));

возвращает значение с точкой (в вашем случае ".xlsx")

Поэтому следующий оператор if возвращает экземпляр HSSFWorkbook вместо XSSFWorkbook.

Для исправления используйте

String FileExtensionName = filename.substring(filename.lastIndexOf(".")+1);
...