在工作中,遇到需要将excel表中的特定数据提取出来,并将数据以键值对的形式存储到map集合中。
因为我用的是maven管理的jar包,所以需要导入的依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> <!-- 处理excel和上面功能是一样的--> <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.10</version> </dependency>
具体实现代码如下:
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.io.*;
import java.util.LinkedHashMap;
import java.util.Map;
public class ReadExcel {
public Map readExcel(File file) {
try {
InputStream is = new FileInputStream(file.getAbsolutePath());
Workbook wb = Workbook.getWorkbook(is);
// Excel的页签数量
int sheet_size = wb.getNumberOfSheets();
for (int index = 0; index < sheet_size; index++) {
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
// 每个页签创建一个Sheet对象
Sheet sheet = wb.getSheet(index);
System.out.println("返回该页的总行数" + sheet.getRows());
for (int i = 1; i < sheet.getRows(); i++) {
// sheet.getColumns()返回该页的总列数
// for (int j = 0; j < sheet.getColumns(); j++) {
String cellinfo1 = sheet.getCell(2, i).getContents();
String cellinfo2 = sheet.getCell(1, i).getContents();
map.put(cellinfo2, cellinfo1);
}
return map;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
ReadExcel obj = new ReadExcel();
File file = new File("E:/test.xls");
Map excelMap = obj.readExcel(file);
}
另外,此代码只能操作文件类型是.xls的excel文件,。xlsx类型的不支持,但是可以在excel中将文件另存为.xls类型的excel文件,也可以进行对生成说的新文件进行读取操作。
String cellinfo1 = sheet.getCell(2, i).getContents();
在sheet.getCell(2, 4).getContents()方法,获取指定单元格的内容,excel中的第一行,第一列实际上在程序中都是从0开始的,比如说getCell(2,4)就是excel中的第3列,第5行的单元格。第一个参数表示列数,第二个参数表示行。