Ebben a részben megtudjuk, hogyan olvashatunk adatokat egy Excel fájlból.
Java nyelven az Excel fájl olvasása nem hasonlít a Word fájl olvasásához, mert az Excel fájlban található cellák találhatók. A JDK nem biztosít közvetlen API-t a Microsoft Excel vagy Word dokumentumok olvasásához vagy írásához. A harmadik féltől származó könyvtárra kell hagyatkoznunk, amely az Apache POI.
Mi az Apache POI?
Apache POI (Poor Obfuscation Implementation) egy Java API a Microsoft dokumentumok mindkét formátumban történő olvasásához és írásához .xls és .xlsx . Osztályokat és interfészeket tartalmaz. Az Apache POI-könyvtár két megvalósítást biztosít az Excel fájlok olvasásához:
Interfészek és osztályok az Apache POI-ban
Interfészek
osztályok
XLS osztályok
XLSX osztályok
Az adatok XLS-fájlból történő olvasásának lépései
1. lépés: Hozzon létre egy egyszerű Java-projektet az eclipse-ben.
2. lépés: Most hozzon létre egy lib mappát a projektben.
3. lépés: Töltse le és adja hozzá a következő jar fájlokat a lib mappába:
- commons-collections4-4.1.jar Kattints ide
- poi-3.17.jar Kattints ide
- poi-ooxml-3.17.jar Kattints ide
- poi-ooxml-schemas-3.17.jar Kattints ide
- xmlbeans-2.6.0.jar Kattints ide
4. lépés: Állítsa be az osztály elérési útját:
Kattintson jobb gombbal a projektre -> Build Path -> External JARs hozzáadása -> válassza ki az összes fenti jar fájlt -> Alkalmaz és zárja be.
5. lépés: Most hozzon létre egy osztályfájlt a névvel ReadExcelFileDemo és írja be a következő kódot a fájlba.
6. lépés: Hozzon létre egy excel fájlt 'student.xls' néven, és írjon bele néhány adatot.
7. lépés: Mentse el és futtassa a programot.
Példa excel fájl (.xls) fájl olvasására
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.FormulaEvaluator; import org.apache.poi.ss.usermodel.Row; public class ReadExcelFileDemo { public static void main(String args[]) throws IOException { //obtaining input bytes from a file FileInputStream fis=new FileInputStream(new File('C:\demo\student.xls')); //creating workbook instance that refers to .xls file HSSFWorkbook wb=new HSSFWorkbook(fis); //creating a Sheet object to retrieve the object HSSFSheet sheet=wb.getSheetAt(0); //evaluating cell type FormulaEvaluator formulaEvaluator=wb.getCreationHelper().createFormulaEvaluator(); for(Row row: sheet) //iteration over row using for each loop { for(Cell cell: row) //iteration over cell using for each loop { switch(formulaEvaluator.evaluateInCell(cell).getCellType()) { case Cell.CELL_TYPE_NUMERIC: //field that represents numeric cell type //getting the value of the cell as a number System.out.print(cell.getNumericCellValue()+ ' '); break; case Cell.CELL_TYPE_STRING: //field that represents string cell type //getting the value of the cell as a string System.out.print(cell.getStringCellValue()+ ' '); break; } } System.out.println(); } } }
Kimenet:
Name Age Height Swarit 23.0 5' Puneet 25.0 6'1' Swastik 22.0 5'5' Tejas 12.0 4'9'
XLSX fájl olvasása
A fájlformátum kivételével minden lépés ugyanaz marad.
Asztal: alkalmazott.xslx
Példa az Excel fájl olvasására (.xlsx)
Ebben a példában az XSSFWorkbook osztályt használjuk.
import java.io.File; import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class XLSXReaderExample { public static void main(String[] args) { try { File file = new File('C:\demo\employee.xlsx'); //creating a new file instance FileInputStream fis = new FileInputStream(file); //obtaining bytes from the file //creating Workbook instance that refers to .xlsx file XSSFWorkbook wb = new XSSFWorkbook(fis); XSSFSheet sheet = wb.getSheetAt(0); //creating a Sheet object to retrieve object Iterator itr = sheet.iterator(); //iterating over excel file while (itr.hasNext()) { Row row = itr.next(); Iterator cellIterator = row.cellIterator(); //iterating over each column while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: //field that represents string cell type System.out.print(cell.getStringCellValue() + ' '); break; case Cell.CELL_TYPE_NUMERIC: //field that represents number cell type System.out.print(cell.getNumericCellValue() + ' '); break; default: } } System.out.println(''); } } catch(Exception e) { e.printStackTrace(); } } }
Kimenet:
Employee ID Employee Name Salary Designation Department 1223.0 Harsh 20000.0 Marketing Manager Marketing 3213.0 Vivek 15000.0 Financial Advisor Finance 6542.0 Krishna 21000.0 HR Manager HR 9213.0 Sarika 34000.0 Sales Manager Sales
Adott cellaérték beolvasása excel fájlból (.xlsx)
Asztal: EmployeeData.xlsx
Példa
A következő példában a 2 értékét olvassuk lendsor és a 2ndoszlop. A sorok és oszlopok számlálása 0-tól kezdődik. Így a program a „Szoftvermérnök” értéket adja vissza.
//reading value of a particular cell import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadCellExample { public static void main(String[] args) { ReadCellExample rc=new ReadCellExample(); //object of the class //reading the value of 2nd row and 2nd column String vOutput=rc.ReadCellData(2, 2); System.out.println(vOutput); } //method defined for reading a cell public String ReadCellData(int vRow, int vColumn) { String value=null; //variable for storing the cell value Workbook wb=null; //initialize Workbook null try { //reading data from a file in the form of bytes FileInputStream fis=new FileInputStream('C:\demo\EmployeeData.xlsx'); //constructs an XSSFWorkbook object, by buffering the whole stream into the memory wb=new XSSFWorkbook(fis); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e1) { e1.printStackTrace(); } Sheet sheet=wb.getSheetAt(0); //getting the XSSFSheet object at given index Row row=sheet.getRow(vRow); //returns the logical row Cell cell=row.getCell(vColumn); //getting the cell representing the given column value=cell.getStringCellValue(); //getting cell value return value; //returns the cell value } }
Kimenet:
Software Engineer