对excel提取数据

需求:下载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;
	}

}


测试结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wl_Bing/article/details/83658025