首页 > 代码库 > Java 读取excel文件 兼容97-2013 V2.0

Java 读取excel文件 兼容97-2013 V2.0

注释里有struts的上传文件和Springmvc有些不一样。读写都是一样的  修复删除缓存文件占用的问题
package com.telling.cw.util.poi;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * poi 读取excel 支持2003 --2007 及以上文件
 * 
 * @author sunny
 * @version V 2.0
 * @CreatTime 2013-11-19 @
 */
public class ExcelUtils {


	/**
	 * 合并方法,读取excel文件
	 * 根据文件名自动识别读取方式
	 * 支持97-2013格式的excel文档
	 * 
	 * @param fileName
	 *            上传文件名
	 * @param file
	 *            上传的文件
	 * @return 返回列表内容格式:
	 *  每一行数据都是以对应列的表头为key 内容为value 比如 excel表格为:
	 * ===============
	 *  A | B | C | D
	 * ===|===|===|===
	 *  1 | 2 | 3 | 4
	 * ---|---|---|--- 
	 *  a | b | c | d
	 * ---------------
	 * 返回值 map:
	 *   map1:   A:1 B:2 C:3 D:4
	 *   map2:   A:a B:b C:d D:d
	 * @throws java.io.IOException
	 */
	@SuppressWarnings("rawtypes")
	public static List<Map> readExcel(String fileName,MultipartFile file) throws Exception{
		//准备返回值列表
		List<Map> valueList=new ArrayList<Map>();
//	    String tempSavePath="tmp";//缓存文件目录的文件夹名称(struts用)
        String filepathtemp="/mnt/b2b/tmp";//缓存文件目录
        String tmpFileName= System.currentTimeMillis()+"."+getExtensionName(fileName);
        String ExtensionName=getExtensionName(fileName);
//      String filepathtemp= ServletActionContext.getServletContext().getRealPath(tempSavePath);//strut获取项目路径
	    File filelist = new File(filepathtemp);
		if  (!filelist .exists()  && !filelist .isDirectory())      
		{       
			filelist .mkdir();    
		} 
		String filePath = filepathtemp+System.getProperty("file.separator")+tmpFileName;
        File tmpfile = new File(filePath);
	    //拷贝文件到服务器缓存目录(在项目下)
//        copy(file,tmpfile);//stuts用的方法
        copy(file, filepathtemp,tmpFileName);//spring mvc用的方法

		//System.out.println("后缀名:"+ExtensionName);
		
		if(ExtensionName.equalsIgnoreCase("xls")){
			valueList=readExcel2003(filePath);
		}else if(ExtensionName.equalsIgnoreCase("xlsx")) {
			valueList=readExcel2007(filePath);
		}
		//删除缓存文件
        tmpfile.delete();
        return valueList;
	 			
	}
	
	/**
	 * 读取97-2003格式
	 * @param filePath 文件路径
	 * @throws java.io.IOException
	 */
	@SuppressWarnings("rawtypes")
	public static List<Map> readExcel2003(String filePath) throws IOException{
		//返回结果集
		List<Map> valueList=new ArrayList<Map>();
        FileInputStream fis=null;
		try {
            fis=new FileInputStream(filePath);
			HSSFWorkbook wookbook = new HSSFWorkbook(fis);	// 创建对Excel工作簿文件的引用
			HSSFSheet sheet = wookbook.getSheetAt(0);	// 在Excel文档中,第一张工作表的缺省索引是0
			int rows = sheet.getPhysicalNumberOfRows();	// 获取到Excel文件中的所有行数­
			Map<Integer,String> keys=new HashMap<Integer, String>();
			int cells=0;
			// 遍历行­(第1行  表头) 准备Map里的key
			HSSFRow firstRow = sheet.getRow(0);
			if (firstRow != null) {
				// 获取到Excel文件中的所有的列
				cells = firstRow.getPhysicalNumberOfCells();
				// 遍历列
				for (int j = 0; j < cells; j++) {
					// 获取到列的值­
					try {
						HSSFCell cell = firstRow.getCell(j);
						String cellValue = http://www.mamicode.com/getCellValue(cell);>

Java 读取excel文件 兼容97-2013 V2.0