Подтвердить что ты не робот

Есть ли способ читать файлы .xls и .xlsx с помощью Apache POI?

Мне нужно создать метод, который может читать файлы xls и xlsx. Согласно моим исследованиям, HSSF используется для чтения xls и XSSF для чтения xlsx. Есть ли часть Apache POI, которую я могу использовать для чтения обоих файлов? Я также наткнулся на ss.usermodel, но не нашел достаточных кодов, которые будут содержать как xls, так и xlsx....

4b9b3361

Ответ 1

У меня не было много опыта с Apache POI, но насколько я знаю, ссылаетесь ли вы на книгу по классу "Workbook", вы можете читать и писать как xls, так и xlsx.

Все, что вам нужно сделать, это создать объект write

для .xls -

Workbook wb = new HSSFWorkbook();

для .xlsx -

Workbook wb = new XSSFWorkbook();

вы можете передать параметр для типа файла и создать объект WorkBook соответствующим образом с помощью оператора If.

Ответ 2

Да, есть новый набор интерфейсов, предоставляемых POI, которые работают с обоими типами.

Используйте метод WorkbookFactory.create() для получения рабочей книги: http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

Вы можете проверить файлы excel, не полагаясь на расширения файлов (которые ненадежны - многие файлы csv имеют расширения xls, но не могут быть проанализированы POI), используя следующее:

//simple way to check for both types of excel files
public boolean isExcel(InputStream i) throws IOException{
    return (POIFSFileSystem.hasPOIFSHeader(i) || POIXMLDocument.hasOOXMLHeader(i));
}

Ответ 3

вы можете читать с помощью флагов poi-ooxml и poi-ooxml-schema, предоставляемых apache.

и используйте ниже код: -

Workbook wb = null;
excelFileToRead = new FileInputStream(fileName);
wb = WorkbookFactory.create(excelFileToRead); 
Sheet sheet = wb.getSheet(sheetName);

приведенный выше код будет читать файлы xls и xlsx

Ответ 4

Спасибо Tom, просто добавьте, используйте foll. код, чтобы получить входной поток еще, мы можем столкнуться с Exception in thread "main" java.io.IOException: mark/reset not supported

     InputStream inputStream = new FileInputStream(new File("C:\\myFile.xls"));

     if(! inputStream.markSupported()) {
                inputStream = new PushbackInputStream(fileStream, 8);
     }   

Ответ 5

один параметр - проверить имя файла с помощью lastIndexOf. и посмотрите, есть ли это .xls или xlsx, а затем используйте условие if для соответствующего переключения. было много времени с тех пор, как я работал над poi, но я думаю, что эти атрибуты похожи на HSSF для .xls и XSSF для .xlsx обратитесь http://poi.apache.org/ сайт, последняя строка по теме Почему я должен использовать POI Apache?

Ответ 6

Вы можете использовать

Workbook wb = WorkBookFactory().create(inputStream); 

Ответ 7

Кажется, вы ищете способ абстрагирования процесса чтения, вы говорите, что не имеет значения, является ли его XLS или XLSX, вы хотите, чтобы ваш код работал без изменений.

Я бы рекомендовал вам посмотреть Apache Tika, свою потрясающую библиотеку, которая абстрагирует чтение файлов и анализ контента, использует POI и многие других библиотек и имеет хорошую абстракцию для всех.

чтение PDF/XLS/XLSX похоже на чтение текстового файла, вся работа выполняется за сценой.

прочитайте это для большего. http://www.searchworkings.org/blog/-/blogs/introduction-to-apache-tika