Java中读取xlsx文件,通常使用Apache POI库来实现,以下是详细的步骤和示例代码:
添加依赖
如果你使用的是Maven项目,需要在pom.xml
文件中添加Apache POI的依赖,以下是常用的依赖配置:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency>
如果不是Maven项目,可以手动下载poi-ooxml
及其依赖的jar包,并添加到项目的类路径中。
编写读取xlsx文件的代码
以下是一个基本的Java程序,用于读取xlsx文件并打印其内容:
import org.apache.poi.ss.usermodel.; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class ReadXLSX { public static void main(String[] args) { String filePath = "path/to/your/excelFile.xlsx"; // 替换为你的xlsx文件路径 try (FileInputStream fis = new FileInputStream(new File(filePath)); Workbook workbook = new XSSFWorkbook(fis)) { // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 遍历行 for (Row row : sheet) { // 遍历单元格 for (Cell cell : row) { switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + "t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "t"); break; case FORMULA: System.out.print(cell.getCellFormula() + "t"); break; default: System.out.print("t"); break; } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } }
代码说明
- FileInputStream:用于读取xlsx文件。
- XSSFWorkbook:用于解析xlsx文件。
- Sheet:表示Excel中的一个工作表。
- Row:表示Excel中的一行。
- Cell:表示Excel中的一个单元格。
- cell.getCellType():用于获取单元格的类型,如字符串、数字、布尔值等。
- try-with-resources:确保文件流和工作簿在使用后自动关闭,避免资源泄露。
处理大文件
如果需要处理非常大的xlsx文件,可以使用Apache POI的SXSSFWorkbook
类,它支持流式读取,减少内存占用,以下是一个简单的示例:
import org.apache.poi.ss.usermodel.; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class ReadLargeXLSX { public static void main(String[] args) { String filePath = "path/to/your/largeExcelFile.xlsx"; // 替换为你的大文件路径 try (FileInputStream fis = new FileInputStream(new File(filePath)); Workbook workbook = new SXSSFWorkbook(new XSSFWorkbook(fis), 100)) { // 100是缓存的行数 // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 遍历行 for (Row row : sheet) { // 遍历单元格 for (Cell cell : row) { switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + "t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "t"); break; case FORMULA: System.out.print(cell.getCellFormula() + "t"); break; default: System.out.print("t"); break; } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } }
常见问题及解决方案
Q1:如何处理日期类型的单元格?
A1:对于日期类型的单元格,可以使用DateUtil.isCellDateFormatted(cell)
来判断,然后使用cell.getDateCellValue()
来获取日期值。
if (DateUtil.isCellDateFormatted(cell)) { System.out.print(cell.getDateCellValue() + "t"); }
Q2:如何读取指定单元格的值?
A2:可以通过Row
和Cell
的getCell(int cellNum)
方法来获取指定列的单元格。
Row row = sheet.getRow(0); // 获取第一行 Cell cell = row.getCell(0); // 获取第一列的单元格 System.out.print(cell.getStringCellValue
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/57917.html