写了一个简单的excel读取类,待扩展更新

原创
2010/09/21 11:00
阅读数 341

工作上的需要,要导入excel到数据库,故简单写了个excel的读取类,功能非常简陋,望各位大虾多多指教,多多补充。后续会应需要增加读取方法。工作结束后更新写操作。

代码上功能上有不对的或别扭的,望各位大虾指正。

package cn.xulu.webdemo.test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
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.hssf.util.AreaReference;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellReference;
/**
 * Excel操作工具类
 * @author xulu
 */ public class ExcelUtil { HSSFWorkbook wb; /** * 构造函数 * @param filePath 文件路径 */ public ExcelUtil(String filePath) { POIFSFileSystem ps; try { ps = new POIFSFileSystem(new FileInputStream(filePath)); wb = new HSSFWorkbook(ps); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 构造函数 * @param wb 工作表 */ public ExcelUtil(HSSFWorkbook wb) { this.wb = wb; } /** * 根据单元格位置、所属表、单元格内容格式获取单元格内容 * @param cellName 单元格位置 * @param sheet 表名 * @return */ public Object getCellValue(String cellName, HSSFSheet sheet, String valueType) { Object value = null; AreaReference af = new AreaReference(cellName); CellReference[] crfs = af.getAllReferencedCells(); for (int i = 0; i < crfs.length; i++) { // System.out.print(crfs[i]); Row r = sheet.getRow(crfs[i].getRow()); Cell c = r.getCell(crfs[i].getCol()); // System.out.print(c.getCellFormula() + " "); if (valueType.equals("C") || valueType.equals("V")) { value = c.getStringCellValue(); } else if (valueType.equals("N")) { value = c.getNumericCellValue(); } else { value = this.getValue(c); } } return value; } /** * 获取单元格内容,进行内容类型判断 * @param c * @return */ public Object getValue(Cell c) { Object value = null; switch (c.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: value = c.getBooleanCellValue(); break; case Cell.CELL_TYPE_NUMERIC: //先看是否是日期格式 if (DateUtil.isCellDateFormatted(c)) { //读取日期格式 value = c.getDateCellValue(); } else { //读取数字 value = c.getNumericCellValue(); } break; case Cell.CELL_TYPE_STRING: //读取String value = c.getRichStringCellValue().toString(); break; } return value; } /** * 获取指定sheet、行号的内容 * @param sheet 表格 * @param rowIndex 行号 * @return 内容集合 */ public Collection getRowValue(HSSFSheet sheet, int rowIndex) { int countCell = 0; Object value = null; Collection values = new ArrayList(); HSSFRow row = sheet.getRow(rowIndex); countCell = row.getPhysicalNumberOfCells(); for (int i = 0; i < countCell; i++) { value = this.getValue(row.getCell(i)); values.add(value); } return values; } /** * 主函数,测试用 * @param args */ public static void main(String[] args) { ExcelUtil eu = new ExcelUtil("D://公司年度偿付能力报表表样(2010年版+再.xls"); HSSFSheet sheet = eu.wb.getSheet("SCX-4"); // Object value = eu.getCellValue("A2", sheet, "V"); //System.out.println("value = " + value); Collection values = eu.getRowValue(sheet, 3); System.out.println(values.toString()); } }

 

展开阅读全文
打赏
0
1 收藏
分享
加载中
你的POI 什么版本?
2012/04/19 22:31
回复
举报
更多评论
打赏
1 评论
1 收藏
0
分享
返回顶部
顶部