需求:下载excel后,上传excel后对excel进行提取
// An highlighted block
package com.xxx.xxxxx.extend.excel.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
*
* 需求:下载指定的excel进行提取,入数据库进行保存
* @author WLB
*
*/
public class ExcelUpRead {
/**
* 测试方法
* @param args
*/
public static void main(String[] args) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(2, 2);
map.put(1, 3);
map.put(3, 5);
map.put(15, 2);
map.put(1, 19);
//提取的坐标,行和列
File file = new File("F://桌面//专利局//转发:专利局项目支撑方案汇总//dddds.xls");
ArrayList list = (ArrayList<String>) returnObject(map, file);
//类型不是固定的,可以为自己封装的实体类,如果顺序读取,list也是可以的
for (int i = 0; i < list.size(); i++) {
System.out.println(i + "行,是" + list.get(i));
}
}
/**
* 对Excel 进行读取,读取指定坐标的字符
*
* @param map
* 坐标集合
* @param file
* 文件路径
* @return 返回一个封装好的实体类或者集合,进行数据库存储
*
*/
public static Object returnObject(HashMap<Integer, Integer> map, File file) {
HSSFSheet sheet = null;
try {
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));// 启动poi
HSSFWorkbook wb = new HSSFWorkbook(fs);// 得到文档对象
// XSSFWorkbook wb = new XSSFWorkbook(fs)
/**
* 注意:
* 新老版本的excel是不同的,可以对文件名进行切割判断,
* 如果文件是xls用对象HSSFWorkbook进行操作
* 如果文件是xlsx,则用XSSFWorkbook对象进行操作
* 在该需求中,客户会下载指定的excel,统一为老版本的xls
*/
sheet = wb.getSheetAt(0);// 得到表单页,sheet,通常第一页,即0
} catch (IOException e) {
e.printStackTrace();
}
List<String> list = new ArrayList<String>();
/**
* 创建对象,可以创建实体类对象进行封装
*/
System.out.println("读取"+file.getName());
for (int i : map.keySet()) {
System.out.println("正在读取第" + i + "行");
HSSFRow row = sheet.getRow(i);
Integer j = map.get(i);
HSSFCell cell = row.getCell(j);
if (cell == null || cell.equals("")) {
list.add("空");//这个地方最好进行控盘的,对null的地方要添加进一个字符,然后对字符进行if判断,不然容易造成空指针
} else {
list.add(cell.toString());
}
}
System.out.println("读取结束");
return list;
}
}
测试结果