java读取excel文件获取数据

本文提供了一个使用Java读取Excel文件的示例代码,并详细介绍了实现步骤及注意事项,包括如何处理单元格合并的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文测试用
第一步:确定你的excel文件是可修改的,而不是只读的(这个问题困了我许久,检验方法 随便输入一些数据保存一些看是否能保存,如果不能这会提示你备份,那就好了,把备份考到项目根文件夹里,即src并列的)
第二步贴下面的代码
package com.testExcel;
// 读取Excel的类
import java.io.File;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
public class readExcel {
public static void main(String args[]) {
try {
System.out.println("begini");
Workbook book = Workbook.getWorkbook( new File( "test.xls" ));
// 获得第一个工作表对象
Sheet sheet = book.getSheet( 0 );
// 得到第一列第一行的单元格
for(int i=0;i<750;i++){
Cell cell1 = sheet.getCell( 0 , i );//前一个参数代表列,后一个参数代表行
String result = cell1.getContents();
System.out.println("第一列,第"+(i+1)+"行"+result);

}
book.close();
System.out.println("end");
} catch (Exception e) {
System.out.println(e);
}
}
}
第三部:问题提示
假如你的execel中,存在上下的合并文件夹,比如第一列中前几个的单元格合并了,那么结果如下
java读取excel文件获取数据其中前几行上下方向的已经被合并,但还是会循环出来
而数据这属于左上方的单元格
当横向和上下方合并单元格时
数据属于左上方单元格,其他单元格为空
即如下
java读取excel文件获取数据

java读取excel文件获取数据
java读取excel文件获取数据
由图可以看到,xml文件中低3列和第四列中的,(频道名称,3) (频道名称,4) (频道名称,5)
(频道url,3) (频道url,4) (频道url,5)这6个单元格合并为了一个,但数据属于 (频道名称,3)这个单元格,其它的单元格均显示为空
### 使用Java读取Excel文件获取数据 以下是基于同库的解决方案及其示例代码: #### 方案一:使用Apache POI Apache POI 是一个广泛使用的开源库,用于操作Microsoft Office文档。它能够轻松地读取和写入Excel文件。 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; public class ReadExcelWithPOI { public static void main(String[] args) throws IOException { String filePath = "example.xlsx"; // 替换为实际路径 try (FileInputStream fis = new FileInputStream(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"); case NUMERIC -> System.out.print(cell.getNumericCellValue() + "\t"); default -> System.out.print("未知\t"); } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } } ``` 此方案适用于`.xlsx`格式文件[^2]。 --- #### 方案二:使用EasyExcel 阿里巴巴提供的 EasyExcel 库专注于简化大文件处理场景下的性能问题。其核心优势在于流式读取,适合大规模数据处理。 ```xml <!-- Maven依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> ``` 下面是一个简单的例子展示如何使用 EasyExcel读取 Excel 数据: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.ArrayList; import java.util.List; // 定义实体类 class DataModel { private String name; private Integer age; @Override public String toString() { return "DataModel{name='" + name + "', age=" + age + "}"; } // Getter 和 Setter 方法省略... } public class ReadExcelWithEasyExcel { public static List<DataModel> readExcel(String fileName) { List<DataModel> result = new ArrayList<>(); EasyExcel.read(fileName, DataModel.class, new AnalysisEventListener<DataModel>() { @Override public void invoke(DataModel data, AnalysisContext context) { result.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) {} }).sheet().doRead(); return result; } public static void main(String[] args) { String filePath = "example.xlsx"; // 替换为实际路径 List<DataModel> dataList = readExcel(filePath); dataList.forEach(System.out::println); } } ``` 该方法特别适合于大数据量的场景下高效读取 Excel 文件[^4]。 --- #### 方案三:使用Spire.XLS for Java Free Spire.XLS for Java 提供了一个简单易用的API接口来完成各种复杂的Excel操作需求。 ```java import com.spire.xls.*; public class ReadExcelWithSpireXLS { public static void main(String[] args) { Workbook workbook = new Workbook(); workbook.loadFromFile("example.xlsx"); // 加载Excel文件 Worksheet sheet = workbook.getWorksheets().get(0); // 获取第一个工作表 int rowCount = sheet.getRowCount(); // 获取总行数 for (int i = 0; i < rowCount; i++) { CellRange range = sheet.getCellRange(i, 0); // 假设从第A开始读取 if (!range.isEmpty()) { System.out.println(range.getValue()); } } } } ``` 需要注意的是 Free 版本存在一定的功能限制,但对于基本的需求已经足够满足[^1]。 --- #### 解决乱码问题 如果在读取过程中发现中文或其他特殊字符显示异常,则可以尝试调整编码方式或者引入合适的第三方库来进行转换。具体做法如下所示: - **方法一**:设置正确的字符集; - **方法二**:利用特定工具包自动解析字节流中的编码信息后再做进一步处理[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值