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& ...
随机推荐
- Knockout.js 数据验证之插件版和无插件版
本文我们将介绍使用 Knockout.js 实现一些基本的数据验证.就如我们在标题里提到的,我们会使用两种方法来创建数据验证方法. 使用自定义方法,不需要任何插件 最简单的方法是使用已有的插件 如果你 ...
- <转>字符编码笔记:ASCII,Unicode和UTF-8
本文转自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 今天中午,我突然想搞清楚Unicode和UTF-8之间 ...
- log4j的NDC/MDC区别与应用
MDC与NDC除了存储方式(MDC采用MapNDC采用堆栈结构)有区别,其他都一样的 关键点 A -//引入log4j MDC类org.apache.log4j.MDC -//设置值 -MDC.put ...
- Android 下拉菜单 Spinner 赋值
private Spinner m_spiModel = null; //产品型号 m_spiModel = (Spinner) findViewById(R.id.spiModel);//产品型号 ...
- PO_全局一揽子采购协议(流程)
2014-06-04 BaoXinjian
- Linux时间子系统(十四) tick broadcast framework
一.前言 在内核中,有cpuidle framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态.当然CPU的idle状 ...
- GO1.6语言学习笔记2-安装配置及代码组织
一.关于GO开发环境的安装和配置 在linux环境中安装编译好的go安装包,参考官方指南的步骤一步步走下来就可以了.需要注意的是以下几个环境变量的配置: GOROOT - ...
- Python splitlines()方法
描述 Python splitlines() 按照行界符('\r', '\r\n', \n'等)分隔,返回一个包含各行作为元素的列表,默认不包含行界符. 能被识别的行界符: 行界符 描述 \n Lin ...
- ps photoshop cc 2015 Extract Assets(生成器)切图大法
Extract Assets 是 Photoshop CC 2014 版本新增的一个特性,主要用来快速导出适用于 Web 和屏幕设计的资源,你可以用它导出 JPG.PNG.GIF,甚至是 SVG 图像 ...
- spring mvc 依赖包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop&l ...