Excel表格解析
//add by yangwenpei WGCW-144 使用Excel表格导入纸票记录 20161212 start
/**
* @param fileInputStream
* @param column 表示要获取的列数
* @return
* @throws ParseDataException
*/
public Map parseDra(FileInputStream fileInputStream,int column) throws ParseDataException{
Map map = new HashMap();
List lTraders = new ArrayList();
POIFSFileSystem fs = null;
HSSFWorkbook wb = null;
try {
fs = new POIFSFileSystem(fileInputStream);
wb = new HSSFWorkbook(fs);
}catch (IOException ioe) {
ioe.printStackTrace();
throw new ParseDataException(ioe.getMessage());
}catch(Exception e){
throw new ParseDataException("文件导入错误,请查看导入EXCEL版本(支持2003以下版本),文件内容是否与模板匹配");
} HSSFSheet sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();//获取表格总行数
int index = 1;
boolean boo = false;//结束for循环结束标记
StringBuffer messgae = new StringBuffer();//记录校验信息
List lists = new ArrayList();
try{
for (int j = 1; j < rows; j++) {
if (sheet.getRow(j) == null) {
throw new ParseDataException("导入文件格式不对,请按照模板的格式进行导入。");
}
// 如果编号为空
if (null == sheet.getRow(j).getCell((short) 0)
|| "".equals((sheet.getRow(j).getCell((short) 0).getStringCellValue().trim()))) {
messgae.append("第" + j + "行编号为空!<br>");
HSSFRow row = sheet.getRow(j);
int count = 0;
for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) {// 遍历表格的一行数据 if (row.getCell((short) i) == null
|| "".equals(row.getCell((short) i).getStringCellValue().trim())) {
count++;
}
if (row.getPhysicalNumberOfCells() == 0) {// 如果一行的数据全为null,结束当前循环
boo = true;
break;
}
if (count == row.getPhysicalNumberOfCells() && count > (column - 1) && (count == i + 1)
|| count == row.getPhysicalNumberOfCells()) {// 如果连续至少column行为空时结束外循环或者为空的数量的当前行的列数
boo = true;
break;
} }
}
if (boo) {// 判断是否结束循环
if (rows == 500) {
String errMsg = "批量导入上限不能超过500行!<br>";
messgae.append(errMsg);
throw new ParseDataException(errMsg);
}
break;
}
List list = getRowContent(sheet.getRow(j), column);// 解析一行的数据
lists.add(list);
index++;
}
map.put("message", messgae.toString());
}catch(ParseDataException e){
String errMsg = "EXCEL第" + index + "行,";
throw new ParseDataException(errMsg + e.getMessage());
}
map.put("lists", lists);
return map;
}
//add by yangwenpei WGCW-144 使用Excel表格导入纸票记录 20161212 end abstract protected Bill getData(SheetContent sheet , HSSFRow row);
//add by yangwenpei WGCW-144 使用Excel表格导入纸票记录 20161212 start
abstract protected List getRowContent(HSSFRow row,int column) throws ParseDataException;
//add by yangwenpei WGCW-144 使用Excel表格导入纸票记录 20161212 end
Excel表格解析的更多相关文章
- node.js 操作excel 表格与XML文件常用的npm
在日常工作中会经常用到把一些excel表格文件转化为json,xml,js等格式的文件,下面就是我在日常中用到的这些npm. 1.node-xlsx: node-xlsx可以把excel文件转化为上面 ...
- JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...
- Java使用POI解析Excel表格
概述 Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能. 常见的Excel格式有xls和xlsx.07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx ...
- 使用PHPExcel解析Excel表格
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...
- java后台读取/解析 excel表格
需求描述 前台需要上传excel表格,提交到后台,后台解析并返回给前台,展示在前台页面上! 前台部分代码与界面 <th style="padding: 7px 1px;width:15 ...
- java解析导入excel表格转为实体类javabean,根据实体类中的中文名称
最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...
- NPOI操作EXCEL(三)——反射机制进行excel表格数据的解析
我们先来回忆回忆上篇文章讲到的通过xml配置文件实现excel批量模板解析的整体思路: 1.对每个excel模板制定xml配置规则集,实现xml配置文件的解析服务 2.为每个excel模板制定DTO, ...
- php解析Excel表格并且导入MySQL数据库
最近根据客户需求,需要增加一个导入Excel表格的功能,Excel中存放的是知识库中医知识的分类体系目录.是在thinkphp框架下编写的代码,用的是phpexcel第三方包.测试环境用的是xampp ...
- VS2010 C++ 操作Excel表格的编程实现
转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...
随机推荐
- 【转】PL/SQL Developer各个窗口的功能
源地址:http://www.codeweblog.com/pl-sql-developer%E5%90%84%E4%B8%AA%E7%AA%97%E5%8F%A3%E7%9A%84%E5%8A%9F ...
- ACdream 1017 [分层图][网络流]
/* 大连热身C题 不要低头,不要放弃,不要气馁,不要慌张 题意: 给一个城市路线图,给定起点给定终点.有n个货物从起点运送到终点.城市的边是无向边. 每个货物每天如果通过某条路,那么这天这条路只能运 ...
- centos 7 + mono + jexus 环境安装
1.安装 mlocate yum list|grep locate yum install mlocate.x86_64 updatedb 2.安装 yum-utils yum list|grep y ...
- [JavaScript]顺序的异步执行
我们知道,在适用js的时候,程序是单线程执行的,而且如果遇到阻塞就会将浏览器卡死. 能否异步的执行,让程序不再卡呢? 可以,用setTimeout. 但是,问题又来了,如果我有这样的要求: 执行一个函 ...
- 从主机访问虚拟机上的Apache
问题:VMWARE上安装的CentOS6.4,安装Apache,启动后,虚拟机上能访问,主机能ping通,但无法访问Apache. 原因:防火墙设置,配置iptables,开放apache的端口80
- openwrt编译环境搭建
1,首先安装ubuntu系统,这里安装的是虚拟机 2,安装openwrt编译所需环境 apt-get install build-essential libncures5-dev gawk libs ...
- oracle批量修改多个表的数据
方法一 写PL/SQL,开cursor declare l_varID varchar2(20); l_varSubName varchar2(30); cursor mycur is sele ...
- java后台调用url无协议
url格式不正确,可能有"www.baidu.com" "这个不能有 // 下载pdf public void downpdf(String URL, String ...
- JavaScript中的分支结构
说到JavaScript中的分支结构,我们就不得不提到流程控制这个词,我们所有的程序都是由数据和算法组成的.程序=数据+算法通常我们所说的算法都可以通过"顺序","分支& ...
- 你注意了么?int与Integer的区别
上次做项目时遇到了一个小问题. 我把javabean中的custid属性定义为int类型,当然与数据库中相应类型是一致的,而且在hibernate文件中配置时专门设置了not-null="f ...