个性化阅读
专注于IT技术分析

如何在Java中读取Excel文件

本文概述

在本节中, 我们将学习如何从excel文件中读取数据。

在Java中, 由于excel文件中的单元格, 因此读取excel文件与读取word文件并不相似。 JDK不提供直接API来读写Microsoft Excel或Word文档。我们必须依赖于Apache POI第三方库。

什么是Apache POI?

Apache POI(拙劣的混淆实现)是一种Java API, 用于读取和写入.xls和.xlsx格式的Microsoft文档。它包含类和接口。 Apache POI库提供了两种用于读取excel文件的实现:

  • HSSF(可怕的SpreadSheet格式)实现:它表示与Excel 2003或更早版本一起使用的API。
  • XSSF(XML SpreadSheet格式)实现:它表示与Excel 2007或更高版本一起使用的API。

Apache POI中的接口和类

介面

  • 工作簿:它代表一个Excel工作簿。它是HSSFWorkbook和XSSFWorkbook的接口工具。
  • 工作表:这是代表Excel工作表的界面。图纸是工作簿的中央结构, 代表单元格的网格。 Sheet接口扩展了java.lang.Iterable。
  • 行:这也是代表电子表格行的界面。 Row接口扩展了java.lang.Iterable。有两个具体的类:HSSFRow和XSSFRow。
  • 单元格:这是一个接口。它是电子表格行中单元格的高级表示。 HSSFCell和XSSFCell实现Cell接口。

班级

XLS类

  • HSSFWorkbook:这是代表XLS文件的类。
  • HSSFSheet:这是一个类, 表示XLS文件中的图纸。
  • HSSFRow:这是一个类, 表示XLS文件工作表中的一行。
  • HSSFCell:这是一个类, 代表XLS文件行中的单元格。

XLSX类

  • XSSFWorkbook:它是表示XLSX文件的类。
  • XSSFSheet:它是表示XLSX文件中的图纸的类。
  • XSSFRow:这是一个类, 表示XLSX文件工作表中的一行。
  • XSSFCell:这是一个类, 代表XLSX文件行中的单元格。

从XLS文件读取数据的步骤

步骤1:在eclipse中创建一个简单的Java项目。

步骤2:现在, 在项目中创建一个lib文件夹。

步骤3:下载以下jar文件并将其添加到lib文件夹中:

  • commons-collections4-4.1.jar单击此处
  • poi-3.17.jar单击此处
  • poi-ooxml-3.17.jar单击此处
  • poi-ooxml-schemas-3.17.jar单击此处
  • xmlbeans-2.6.0.jar单击此处

步骤4:设定类别路径:

右键单击项目->构建路径->添加外部JAR->选择上述所有jar文件->应用并关闭。

步骤5:现在创建一个名称为ReadExcelFileDemo的类文件, 并在文件中写入以下代码。

步骤6:创建一个名为“ student.xls”的excel文件, 并将一些数据写入其中。

如何在Java中读取Excel文件

步骤7:保存并运行程序。

读取Excel文件(.xls)文件的示例

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()+ "\t\t"); 
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()+ "\t\t");
break;
}
}
System.out.println();
}
}
}

输出:

Name        Age        Height		
Swarit      23.0        5"
Puneet      25.0        6'1"
Swastik     22.0        5'5"
Tejas       12.0        4'9"

读取XLSX文件

除文件格式外, 所有步骤将保持不变。

表:employee.xslx

如何在Java中读取Excel文件

读取Excel文件(.xlsx)的示例

在此示例中, 我们使用XSSFWorkbook类。

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<Row> itr = sheet.iterator();    //iterating over excel file
while (itr.hasNext()) 				
{
Row row = itr.next();
Iterator<Cell> 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() + "\t\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:    //field that represents number cell type
System.out.print(cell.getNumericCellValue() + "\t\t\t");
break;
default:
}
}
System.out.println("");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

输出:

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

从Excel文件(.xlsx)读取特定的单元格值

表:EmployeeData.xlsx

如何在Java中读取Excel文件

在下面的示例中, 我们读取第二行和第二列的值。行和列的计数从0开始。因此程序返回“ Software Engineer”。

如何在Java中读取Excel文件
//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
}
}

输出:

Software Engineer

赞(0)
未经允许不得转载:srcmini » 如何在Java中读取Excel文件

评论 抢沙发

评论前必须登录!