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