Как я могу читать файлы.xlsx и.xls в Java?
Привет я хочу прочитать файл xlsx или файл xls, что бы это ни было. XSSF может поддерживать файл xls? или мне нужно написать отдельный код для обоих типов файлов?
6 ответов
Да, вы можете использовать Apache POI для чтения и записи файлов xlsx и xls.
Если вы хотите, чтобы ваш код работал для обоих, вам придется использовать org.apache.poi.ss
пакет. Этот пакет был создан для объединения XSSF и HSSF.
Для одного из моих проектов я создал базовую утилиту, которая использует Apache POI и OpenCSV и может читать файлы xlsx, xls и csv.
Имея конвертер, он может конвертировать строки в объекты, например так:
RowConverter<Country> converter = (row) -> new Country(row[0], row[1]);
ExcelReader<Country> reader = ExcelReader.builder(Country.class)
.converter(converter)
.withHeader()
.csvDelimiter(';')
.sheets(1)
.build();
List<Country> list;
list = reader.read("CountryCodes.xlsx");
list = reader.read("CountryCodes.xls");
list = reader.read("CountryCodes.csv");
Вы можете найти проект на github.
Используйте это для xls и xlsx
Workbook wb_xssf; //Declare XSSF WorkBook
Workbook wb_hssf; //Declare HSSF WorkBook
Sheet sheet=null; //sheet can be used as common for XSSF and HSSF WorkBook
if(fileBean.getFileExt().equalsIgnoreCase("xls")){
wb_hssf = new HSSFWorkbook();
sheet = wb_hssf.getSheetAt(0);
}else if (fileBean.getFileExt().equalsIgnoreCase("xlsx")){
wb_xssf = new XSSFWorkbook(fileBean.getFileInput());
sheet = wb_xssf.getSheetAt(0);
}
Вы можете использовать следующий код и изменить его (зависит от ваших потребностей):
public void parseXLSX() {
String pathToXLSX = "file.xlsx";
File file = new File(pathToXLSX);
FileInputStream in = null;
try {
in = new FileInputStream(file);
XSSFWorkbook workbook = new XSSFWorkbook(in);
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
XSSFSheet sheet = workbook.getSheetAt(i);
int rowNumber = sheet.getLastRowNum() + 1;
for (int j = 1; j < rowNumber; j++) {
Iterator it = sheet.getRow(j).cellIterator();
while (it.hasNext()) {
System.out.println(it.next().toString());
}
}
}
} catch (IOException ex) {
ex.getMessage();
ex.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ex) {
ex.getMessage();
ex.printStackTrace();
}
}
}
}
Вы можете попробовать это для файлов xlsx:
Во-первых, вам нужны следующие файлы jar:
- dom4j-2.1.0.jar
- пои-3.17.jar
- пои-OOXML-3.17.jar
- Обще-collections4-4.1.jar
- XMLBeans-2.3.0.jar
Во-вторых, добавьте следующий импорт в ваше рабочее пространство:
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
В-третьих, начните строить свой метод, например, для чтения используйте это:
public void ReadExcelFiles(String pathxlsx,javax.swing.JTable jtable) throws IOException{
//String nameSheet;
File file = new File(pathxlsx);
FileInputStream fis = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(fis);
// nameSheet=wb.getSheetName(0);
//XSSFSheet sh = wb.getSheet(nameSheet);
XSSFSheet sh = wb.getSheetAt(0);
System.out.println(sh.getLastRowNum());
System.out.println("Name: "+sh.getSheetName());
Row row = sh.getRow(6);
System.out.println(row.getRowNum());
System.out.println("columna "+row.getCell(1).getStringCellValue());
System.out.println("columna "+row.getCell(2).getStringCellValue());
System.out.println("columna "+row.getCell(3).getStringCellValue());
System.out.println("columna "+row.getCell(4).getStringCellValue());
System.out.println("Val: "+sh.getRow(4).getCell(6).getStringCellValue());
}