java 读取execl文件
java 中读取execl文件是必要功能,下面说下几种读取方式
/*** 规则设置的模板导入* @param file* @param exportDefindColum* @param exportDefindRemark* @param exportDefineid* @return* @throws Exception*/public List readSmProfitRuleExcel(File file,String[] defineColums,String[] defineRemarks,String[] defineids) throws Exception{Workbook book = null;Cell cell = null;try {WorkbookSettings setting = new WorkbookSettings();java.util.Locale locale = new java.util.Locale("zh","CN");setting.setLocale(locale);setting.setEncoding("ISO-8859-1");book = Workbook.getWorkbook(file, setting);} catch (Exception e2) {throw new Exception("Excel文件" + file.getName() + "读取出错。");}List list = new ArrayList();try {Sheet sheet = book.getSheet(0);int rows=sheet.getRows();int columns=sheet.getColumns();if(rows==0){throw new Exception("Excel文件" + file.getName() + "无任何内容,禁止导入。");}if(columns!=defineColums.length+1){System.out.println("取出execl"+columns+"行,实际取出"+defineColums+1+"行");throw new Exception("Excel文件" + file.getName() + "列头与模板列头不符 ,禁止导入 (如修改了规则,需存档重新生成模板再导入)。");}for (int i = 0; i < defineids.length; i++) {String head = defineRemarks[i]+"-"+defineColums[i].substring(defineColums[i].indexOf(":")+1);if(!sheet.getCell(i,0).getContents().equals(head)){System.out.println("取出execl列头"+sheet.getCell(i,0).getContents()+",实际取出"+head+"不匹配");throw new Exception("Excel文件" + file.getName() + "列头与模板列头不符 ,禁止导入 (如修改了规则,需存档重新生成模板再导入)。");}}for (int i = 1; i < rows; i++) {for (int j = 0; j < columns; j++) {String content=sheet.getCell(j,i).getContents().trim();if(content.equals("")){throw new Exception("Excel文件" + file.getName() + "第"+(i+1)+"行,第"+(j+1)+"列存在空数据,禁止导入");}Map<String, String> map = new HashMap<String, String>();if(j>defineids.length-1){map.put("defineid", "-1");}else{map.put("defineid", defineids[j]);}map.put("linenum",(i+1)+"");map.put("value", content);list.add(map);}}book.close();} catch (Exception e) {book.close();throw new Exception(e.getMessage());}return list;}

package com.dadi.oa.util.poi;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;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 com.dadi.oa.util.StringUtil;/*** poi 读取 </br>* 1.execl兼容 03,07 <br/>* 2.构造方法需传入标准 <br/>* 3.对应的标准可以在checkReadStandard()扩展 <br/>** @author ao.ouyang*/public class ExeclReader {private final Log logger = LogFactory.getLog(this.getClass());/*** 数据Map集合 dataMap ,默认标准Map keys :<br/>* rowNum : 行号 <br/>* ColumnNum : 列号 <br/>* val : String类型值*/private List dataMap = new ArrayList();//读取标准,定义新的标准可以在检查标准方法中拓展private String readStandard;private File readFile;private Workbook wb;private Sheet st;private Row row;//抽取文本工具private ExeclExtractor extractor;/*** ExeclReader* @param readItem 读取的execl* @param readStandards 无标准 Null*/public ExeclReader(File readFile,String readStandards) throws Exception{this.readFile = readFile;this.readStandard = readStandard;readExecl();}private void readExecl() throws Exception{InputStream inputStream = new FileInputStream(readFile);try {if(readFile.getAbsolutePath().endsWith("xlsx")){wb=new XSSFWorkbook(inputStream);//实例化抽取工具extractor = new XSSFExeclExtractor((XSSFWorkbook)wb);}else{wb=new HSSFWorkbook(inputStream);extractor = new HSSFExeclExtractor((HSSFWorkbook)wb);}extractor.setFormulasNotResults(true);extractor.setIncludeCellComments(true);} catch (Exception e) {e.printStackTrace();throw new Exception("EXECL文件读取失败,请检查文件!");}st=wb.getSheetAt(0);//检查标准checkReadStandard();}/*** 检查标准* @throws Exception*/private void checkReadStandard() throws Exception{if(StringUtil.isEmptyString(readStandard)){ //默认标准,无操作,读取execl数据readExeclToMapList();}}/*** 读取execl数据 封装数据* @throws Exception*/private void readExeclToMapList() throws Exception{logger.info("============ExeclReader.readExeclToMapList() begin===========");try {for (int i = st.getFirstRowNum(); i <= st.getLastRowNum(); i++) {row=st.getRow(i);List<HashMap<String, String>> rowMap = new ArrayList<HashMap<String,String>>();for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {HashMap<String,String> cellMap = new HashMap<String, String>();cellMap.put("rowNum", String.valueOf(i+1));cellMap.put("ColumnNum", String.valueOf(j+1));Cell cell = row.getCell(j) ;cellMap.put("val",extractor.getText(cell));rowMap.add(cellMap);}dataMap.add(rowMap);}} catch (Exception e) {e.printStackTrace();throw new Exception("读取execl 数据异常,请检查!!!");}logger.info("============ExeclReader.readExeclToMapList() end===========");}/*** 返回头数据* @return*/public List getHeaderData(){return (List) dataMap.get(0);}/*** 返回底部数据* @return*/public List getBottomData(){return (List) dataMap.get(dataMap.size()-1);}/*** 返回指定行的数据* @param columnIndex* @return*/public List getRowData(int rowIndex){if(rowIndex<0){return getHeaderData();}else if(rowIndex > dataMap.size()){return getBottomData();}else{return (List) dataMap.get(rowIndex-1);}}/*** 获取指定列数据* @return*/public List getcolumnData(int coloumIndex){if(coloumIndex > getColumnNum()){coloumIndex = getColumnNum();}else if(coloumIndex < 1){coloumIndex = 1;}else{coloumIndex = coloumIndex-1;}List columnData = new ArrayList();for (int i = 0; i < dataMap.size(); i++) {List rowData = (List) dataMap.get(i);for (int j = 0; j < rowData.size(); j++) {if(i==coloumIndex){columnData.add(rowData.get(j));}}}return columnData;}/*** 返回行总数* @return*/public int getRowCount(){return st.getLastRowNum();//return st.getPhysicalNumberOfRows();}/*** 返回列总数* @return*/public int getColumnNum(){return st.getRow(st.getFirstRowNum()).getLastCellNum();/* row= st.getRow(0);return row.getPhysicalNumberOfCells();*/}/*** 返回数据总数* @return*/public int getDataCount(){return getRowCount() * getColumnNum();}/*** 返回数据总数 不含头* @return*/public int getNotHeaderDataCount(){return getRowCount()-1 * getColumnNum();}public List getDataMap() {return dataMap;}public void setDataMap(List dataMap) {this.dataMap = dataMap;}}


附件列表
java 读取execl文件的更多相关文章
- java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)
java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...
- Java读取Excel文件的几种方法
Java读取 Excel 文件的常用开源免费方法有以下几种: 1. JDBC-ODBC Excel Driver 2. jxl.jar 3. jcom.jar 4. poi.jar 简单介绍: 百度文 ...
- Java读取txt文件
package com.loongtao.general.crawler.slave.utils; import java.io.BufferedReader; import java.io.File ...
- java 读取XML文件作为配置文件
首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...
- java 读取TXT文件的方法
java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...
- 用java读取properties文件--转
今天为了通过java读取properties文件,google了很长时间,终于找到了.现在特记录之和大家一起分享. 下面直接贴出代码:java类 public class Mytest pub ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
- java读取TXT文件的方法
java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
随机推荐
- js setTimeout 传递带参数的函数的2种方式
js setTimeout 传递带参数的函数的2种方式 Created by Marydon on 2018年9月14日 1.准备工作 function sayYourName(param) { ...
- windows2003密码忘记了该如何处理
如果你有sql server的管理员帐号,并且可以登录,尝试用下面的方法: --用管理员连接sql,在查询分析器中执行: --添加用户 exec mas ...
- 小程序三:视图层之WXML
WXML WXML(WeiXin Markup Language)是MINA设计的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构. [1]数据绑定 1.1 简单绑定 数据绑定使用" ...
- eclipse里面的时间错误,比电脑系统时间慢了8个小时
eclipse里面的时间错误,比电脑系统时间慢了8个小时 解决办法: 打开<eclipse安装目录>/eclipse.ini文件 在文件末尾追加 -Duser.timezone=Asia/ ...
- 从零开始的 Python 爬虫速成指南
序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容. 本文受众:没写过爬虫的萌新. 入门 0.准备工作 需要准备的东西: Python.scrapy.一个IDE或者随便 ...
- 【LeetCode】18. 4Sum (2 solutions)
4Sum Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d ...
- C# 打开钱箱支持北洋、佳博、爱普生
/// <summary> /// 执行开钱箱操作 /// 没钱箱或打印机原功能都可以正常使用 /// </summary> public void ExecuteOpenCa ...
- ios 利用UIScrollView实现图片缩放
前言:我们希望做出的效果是,实现图片的分页滑动,且每张图片都可以双击或用手指捏合来缩放大小.上一篇讲解UIGestureRecognizer的中,我们介绍的UIPinchGestureRecogniz ...
- Chrome 错误代码:ERR_UNSAFE_PORT
最近在用Nginx发布多个站点测试,使用了87.88端口, 88端口访问正常,87端口就怎么也访问不了, 点击更多,提示错误代码:ERR_UNSAFE_PORT 不安全的端口?尼玛就只靠端口就能解决不 ...
- OAF_OAF组件系列1 - Item Style汇总(概念)
20150506 Created By BaoXinjian