poi读取Excel

来源:互联网 发布:网络歌曲原创怎么合作 编辑:程序博客网 时间:2024/05/22 09:01

        本文为poi生成Excel的序章。

        示例代码如下所示:

/** *  */package com.geloin.poi.main;import java.io.FileInputStream;import java.math.BigDecimal;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Iterator;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;/** * @author Geloin *  */public class PoiReadExcel {/** * @param args */public static void main(String[] args) throws Exception {String filePath = "d:/work/proTmp/geloin/poi/export.xls";POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));HSSFWorkbook workBook = new HSSFWorkbook(fs);HSSFSheet sheet = workBook.getSheetAt(0);Iterator<Row> it = sheet.rowIterator();while (it.hasNext()) {Row row = it.next();int cellCount = row.getPhysicalNumberOfCells();for (int i = 0; i < cellCount; i++) {Cell cell = row.getCell(i);String cellValue = getCellFormatValue(cell);System.out.print(cellValue + "\t\t");}System.out.println();}}/** * 根据HSSFCell类型设置数据 *  * @param cell * @return */private static String getCellFormatValue(Cell cell) {String cellvalue = "";if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase HSSFCell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Dateif (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,转化为Data格式Date date = cell.getDateCellValue();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");cellvalue = sdf.format(date);} else {// 如果是纯数字// 取得当前Cell的数值BigDecimal big = new BigDecimal(cell.getNumericCellValue());cellvalue = String.valueOf(big.longValue());}break;}case HSSFCell.CELL_TYPE_NUMERIC: {// 假设为日期型Date date = cell.getDateCellValue();Calendar c = Calendar.getInstance();c.setTime(date);if (c.get(Calendar.YEAR) > 1900&& String.valueOf(c.get(Calendar.YEAR)).length() == 4) {// 如果年大于1900且年的长度等于4,此处是不严格的处理,当年度为1900时,就会出错,目前没有找到更好的解决办法SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");cellvalue = sdf.format(date);} else {cellvalue = String.valueOf(cell.getNumericCellValue());if (!cellvalue.matches("\\d+\\.\\d+")) {// 如果不是double,则转一下BigDecimal big = new BigDecimal(cell.getNumericCellValue());cellvalue = String.valueOf(big.longValue());}// 如果是double,返回结果。}break;}// 如果当前Cell的Type为STRINcase HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串cellvalue = cell.getRichStringCellValue().getString();break;// 默认的Cell值default:cellvalue = " ";}} else {cellvalue = "";}return cellvalue;}}

        getCellFormatValue方法应该为一个较为通用的方法,可写在工具类中。

        代码比较简单,不再赘述。

原创粉丝点击