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& ...
随机推荐
- [Unity-1] Unity简单介绍
Unity是一套包含图形.声音.物理等功能的游戏引擎,提供了一个强大的关卡编辑器.支持大部分主流3D软件格式,使用C#或者JavaScript等高级语言实现脚本功能.使开发人员无需了解底层复杂技术,高 ...
- 为什么要有GDT
逻辑地址-------------->线性地址------------> 物理地址 分段 分页 GDT是[gobal (segment) descriptor table]的缩写,它保 ...
- el表达式 多条件判断
el表达式 多条件判断 CreationTime--2018年9月13日08点59分 Author:Marydon 1.情景展示 ACCESS_ID == 'APP1039' 且 CARDTYPE ...
- POJ2226
题意:给定一个矩阵,当中有一些地方有水,如今有一些长度随意,宽为1的木板,要求在全部板不跨越不论什么坑的前提下,用一些木板盖住这些有水的地方,问至少须要几块板子? 思路: watermark/2/te ...
- map()3
# -*- coding: utf-8 -*- #python 27 #xiaodeng #map()3 ''' map(...) map(function, sequence[, sequence, ...
- Linux 文件系统的目录定义
目录名称 应放置文件的内容 /boot 开机所需文件——内核,开机菜单及所需配置文件等 /dev 任何设备与接口都以文件形式存放在此目录 /etc 配置文件 /home 用户主目录 /bin 单用户维 ...
- 着重protected、default区别
public是所有,在哪都可以访问private是私有,仅在自己类里面可以访问protected是自己包里面可以访问,如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类.default也是 ...
- 两个有序数组求中位数log(m+n)复杂度
leetcode 第4题 中位数技巧: 对于长度为L的有序数组,它的中位数是(a[ceil((L+1)/2)]+a[floor((L+1)/2)])/2 算法原理: 类似三分法求极值 两个人都前进,谁 ...
- python学习笔记——创建事件对象Event
1 Event对象的基本概述 用 multiprocessing.Event 实现线程间通信,使用multiprocessing.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到 ...
- 转:void *
void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值.例 ...