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& ...
随机推荐
- 查询SQL存储过程创建时间
select [name] ,create_date ,modify_date FROM sys.all_objects where type_desc = N'SQL_STORED_PROCE ...
- CSS3动画效果之Transform
无意中翻看博客发现这个属性,就顺便熟悉了一下,百度了一下和查看了CSS3帮助文档,特整理一下 Transform 适应于对任一DOM元素的2D或3D转换,转换效果有:旋转.拉伸.平移.倾斜等. 目前浏 ...
- 9、java中static详解
一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没 ...
- highstock K线图 深入研究
K线图,相信每个股民都不陌生,如何用SVG画好一个K线图是一个难题. 我选择用highstock做为画图组件,适当的修改了一下源码,参考了数个财经网站的案例,完成了一个不太成熟的K线图,欢迎大家批评指 ...
- vs2010 javascript代码拓展插件支持代码折叠
参考地址
- java多线程(五)之总结(转)
引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...
- HDUOJ----3342Legal or Not
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Flask接通微信公众号
import hashlib import xml.etree.ElementTree as ET from flask import Flask, request import time app = ...
- 推荐系统之 BPR 算法及 Librec的BPR算法实现【2】
先前的是:推荐系统之 BPR 算法及 Librec的BPR算法实现[1] LibREC源码里的BPR算法的输入比较是:“(购买+点击)v.s.没出现的”,先前有修改过一次是让输入比较对为:“购买v.s ...
- android中ImageView的ScaleType属性
android中ImageView的ScaleType属性 ScaleType的值分别代表的意义: ImageView是Android中的基础图片显示控件,该控件有个重要的属性是ScaleType,该 ...