工作上的需要,要导入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()); } }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。