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& ...
随机推荐
- 〖Windows〗zigbee实验之cygwin编译tinyos.jar编译出错的解决方法
1. 使用的cygwin安装包下载地址:cygwin-files.zip 2. 使用的一些rpm安装包的下载地址:cygwin_cc2430_rpms.zip 3. cygwin的默认安装目录是:C: ...
- Knockout.js 数据验证之插件版和无插件版
本文我们将介绍使用 Knockout.js 实现一些基本的数据验证.就如我们在标题里提到的,我们会使用两种方法来创建数据验证方法. 使用自定义方法,不需要任何插件 最简单的方法是使用已有的插件 如果你 ...
- webservice系统学习笔记7-使用handler实现过滤器/拦截器效果
handler可以作用于客户端,也可以作用了服务端 handler分为:1.LogicalHandler:只能获取到soap消息的body. 2.SOAPHandler:可以获取SOAPMessage ...
- VB.NET服务器端令客户端下载PDF文件
后台JS调用另一个控件,通过SESSION传递sDocumentPath 控件后台代码如下 Response.Clear() '如果不清,则有可能将页面源码作为文件内容的一部分传递给用户 ...
- &和&&的一点区别
&两边的语句都会执行,&&有可能只执行左边的语句. &做位运算与的时候可以更高效的判断一个数字是不是奇数. 1&1 = 1 0&1 = 0 所以和1与结 ...
- 微信小程序-通知滚动小提示
代码地址如下:http://www.demodashi.com/demo/14044.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 那些遇到的position-fixed无效事件
本篇文章由:http://xinpure.com/position-fixed-encountered-an-invalid-event/ 第一次无效事件 事件主角: transform 应用环境: ...
- 马老师 生产环境mysql主从复制、架构优化方案
Binlog日志(主服务器) => 中继日志(从服务器 运行一遍,保持一致).从服务器是否要二进制日志取决于架构设计.如果二进制保存足够稳定,从性能上来说,从服务器不需要二进制日志.默认情况下, ...
- PC端轻松控制Android手机,PC Control Andoroid,PC控制安卓手机
记录此次经历的目的是帮助需要的人或下次使用时少走弯路,我为此试用了不少工具及方法,因为追求免费,像"Weak Control:在PC上控制你的Android手机"还要收费的我就不弄 ...
- PowerDesigner 表模型图展示列信息
今天突然发现表模型不展示列信息了,只显示一个名称,如下图: 虽让点击表模型能看到,但我想让他本身就显示,pd默认就是会显示的,今天不知怎么了,网上找这方面的设置很难找,所以我记录下设置方法(我 ...