POI 3.8读取2003与2007格式EXCEL(xls、xlsx)

废话少说直接上代码,记得是poi3.8版本啊。方法入口唯一,自动判断格式,使用接口引用,自动选择执行方法。

方法入口:

public static ArrayList<String[]> explanExcelToList(String fileName) {
ArrayList<String[]> list = new ArrayList<String[]>();
Workbook wb = null;
try {
wb = get2003Workbook(new FileInputStream(fileName));
if (wb == null) {
wb = get2007Workbook(new FileInputStream(fileName));
if (wb == null) {
throw new RuntimeException("无法识别的格式,Unexpected Excel type (" + fileName + ")");
}
}
list = explanExcelToList(wb);

} catch (IOException e) {
e.printStackTrace();
}
return list;
}

package com.order.cc.outboundcall.impExlDate.svc;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.struts.upload.FormFile;

public class ExcelHelper {
	private static Integer SHEET_PAGE_NUM = 0;// 读取sheet页第一页

	public static ArrayList<String[]> explanExcelToList(String fileName) {
		ArrayList<String[]> list = new ArrayList<String[]>();
		Workbook wb = null;
		try {
			wb = get2003Workbook(new FileInputStream(fileName));
			if (wb == null) {
				wb = get2007Workbook(new FileInputStream(fileName));
				if (wb == null) {
					throw new RuntimeException("无法识别的格式,Unexpected Excel type (" + fileName + ")");
				}
			}
			list = explanExcelToList(wb);

		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

	public static ArrayList<String[]> explanExcelToList(Workbook wb) {
		ArrayList<String[]> resList = new ArrayList<String[]>();
		if (wb == null) {
			return resList;
		}
		try {
			wb.setMissingCellPolicy(Row.RETURN_BLANK_AS_NULL);// 空白设置为null
			// 读取第一章表格内容
			Sheet sheet = wb.getSheetAt(SHEET_PAGE_NUM);
			if (sheet == null) {
				return resList;
			}
			// 循环输出表格中的内容
			resList = explantSheet(sheet);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resList;
	}

	/**
	 *
	 * 功能说明 使用接口解析Sheet,支持HSSFSheet 与XSSFSheet格式
	 *
	 * @创建人 yxh
	 * @时间 2016-4-26
	 * @参数说明 @param list
	 * @参数说明 @param sheet
	 * @参数返回说明 void
	 */
	public static ArrayList<String[]> explantSheet(Sheet sheet) {
		ArrayList<String[]> list = new ArrayList<String[]>();
		if (sheet == null) {
			return list;
		}
		int rowNum = sheet.getRow(0) != null ? sheet.getRow(0).getPhysicalNumberOfCells() : 0;// 通过表头定义数组的位数,确定每行固定大小
		if (rowNum == 0) {
			rowNum = sheet.getRow(1) != null ? sheet.getRow(1).getPhysicalNumberOfCells() : 0;// 防止不写表头
		}
		for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {// 循环行
			Row row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			String[] contentArr = new String[rowNum];
			for (int j = 0; j < rowNum; j++) {// 循环列
				Cell cell = row.getCell(j);
				String text = "";
				if (cell != null) {
					text = formatCell(cell);
				}
				contentArr[j] = text;
			}
			list.add(contentArr);
		}
		return list;
	}

	/**
	 *
	 * 功能说明 格式化表格内容
	 *
	 * @创建人 yxh
	 * @时间 2016-4-26
	 * @参数说明 @param cell
	 * @参数说明 @return
	 * @参数返回说明 String
	 */
	public static String formatCell(Cell cell) {
		DataFormatter _formatter = new DataFormatter();
		switch (cell.getCellType()) {
		case Cell.CELL_TYPE_STRING: // 2016年4月27日11:19:20 在excel中视为字符串形式
			return cell.getRichStringCellValue().getString();
		case Cell.CELL_TYPE_NUMERIC:// 数值型
			if (DateUtil.isCellDateFormatted(cell)) {// 日期 poi
				return dateToString(cell.getDateCellValue());
			} else {
				return _formatter.formatCellValue(cell);
			}
		case Cell.CELL_TYPE_BOOLEAN:
			return cell.getBooleanCellValue() == true ? "true" : "false";// boolean
			// 转成String
		case Cell.CELL_TYPE_ERROR:
			return ErrorEval.getText(cell.getErrorCellValue());// 返回错误码
		case Cell.CELL_TYPE_FORMULA:// 公式
			switch (cell.getCachedFormulaResultType()) {
			case Cell.CELL_TYPE_STRING:
				RichTextString str = cell.getRichStringCellValue();
				if (str != null && str.length() > 0) {
					return str.toString();
				}
			case Cell.CELL_TYPE_NUMERIC:
				CellStyle style = cell.getCellStyle();
				if (style == null) {
					return cell.getNumericCellValue() + "";// double转成String
				} else {
					return _formatter.formatRawCellContents(cell.getNumericCellValue(), style.getDataFormat(), style.getDataFormatString());
				}
			case Cell.CELL_TYPE_BOOLEAN:
				return cell.getBooleanCellValue() ? "true" : "false";// boolean
				// 转成String
			case Cell.CELL_TYPE_ERROR:
				return ErrorEval.getText(cell.getErrorCellValue());

			}
		default:
			throw new RuntimeException("Unexpected cell type (" + cell.getCellType() + ")");
		}
	}

	public static String dateToString(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.format(date);
	}

	public static String dateToString(String date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.format(date);
	}

	public static void closeFile(FormFile file) {
		if (file != null) {
			try {
				file.destroy();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	public static Workbook get2003Workbook(InputStream is) {
		Workbook wb = null;
		try {
			wb = new HSSFWorkbook(is);
		} catch (Exception e) {
			return wb;
		}
		return wb;
	}

	public static Workbook get2007Workbook(InputStream is) {
		Workbook wb = null;
		try {
			wb = new XSSFWorkbook(is);
		} catch (Exception e) {
			return wb;
		}
		return wb;
	}

	public static boolean isExcel2003(InputStream is) {
		try {
			new HSSFWorkbook(is);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	public static boolean isExcel2007(InputStream is) {
		try {
			new XSSFWorkbook(is);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	public static void main(String[] args) {
		// FormFile file=null;
		// explanExcelToList(file);
	}
}
时间: 2024-10-14 17:17:01

POI 3.8读取2003与2007格式EXCEL(xls、xlsx)的相关文章

JAVA用POI读取和创建2003和2007版本Excel完美示例

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import j

C#中npoi操作Excel[版本2.0.1读写2003、2007格式]

public static void test1()       {           NpoiHelper np = new NpoiHelper();           DataTable dt1 = np.ReadExcel(AppDomain.CurrentDomain.BaseDirectory + "1测试数据.xls", 2).Tables[0];//读2003格式数据           DataSet ds1 = new DataSet();           

PHPExcel 导出2003和2007的excel文档实例

require_once 'common/excel/PHPExcel.php'; require_once 'common/excel/phpExcel/Writer/Excel2007.php'; require_once 'common/excel/phpExcel/Writer/Excel5.php'; include_once 'common/excel/phpExcel/IOFactory.php'; $objExcel = new PHPExcel(); //设置属性 (这段代码无

java使用poi.3.10读取excel 2007以上版本(xlsx格式)

1.在使用过程中,一直报错 throw new ClassNotFoundException(name);原因:没有导入xmlbeans-2.6.0.jar包,建议在使用poi时,将所有包都导入进工程. 2.案例源码 import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf

java通过apache poi框架读取2007版Excel文件

java系读写excel文件既可以用jxl库,也可以用POI库,但是,jxl库只支持低版本的excel2003,不支持更高版本,无法直接输出*.xlsx文件,只能输出*.xls文件,另外,更新也不频繁.所以,目前大多采用POI库. jxl库官网:http://jxl.sourceforge.net/ POI介绍要想使用POI对Excel进行操作,我们需要先了解一下Excel的两种版本:一种是97-2003版本扩展名是“.xls”:一种是2007版本扩展名是“.xlsx”.POI分别针对这两种版本

POI读取加密的EXCEL(兼容XLS,XLSX格式)

最近项目里需要读取加密的excel,有xls和xlsx两种类型,对于加解密apache官方网站有简要说明 需要的jar包poi-3.9,jar    poi-ooxml-3.9.jar  poi-ooxml-schemas-3.9.jar   xmlbeans-2.3.0.jar  dom4j-1.6.1.jar 注意poi的3个jar版本号要对应,不然会有一些问题. 上代码咯~ /** * Excel导入 */ @SuppressWarnings("unchecked") @Requ

转帖 java使用poi.3.10读取excel 2010

package poi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss

使用Apache下poi创建和读取excel文件

一:使用apache下poi创建excel文档 1 @Test 2 /* 3 * 使用Apache poi创建excel文件 4 */ 5 public void testCreateExcel() { 6 // 1:创建一个excel文档 7 HSSFWorkbook workbook = new HSSFWorkbook(); 8 // 2:创建一个sheet工作表,名为“学生成绩” 9 HSSFSheet sheet = workbook.createSheet("学生成绩");

在文件中读取、存储Json格式的字符串

public class Weather { static readonly string FilePath = System.Environment.CurrentDirectory + @"\Area.txt"; public static Models.Area GetCurrentArea() { var file = new FileInfo(FilePath); Models.Area result; if (!file.Exists) { //文件不存在就返回一个默认值,