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表格的操作的方法有多种, ...
随机推荐
- 自己写的基于bootstrap风格的弹框插件
自己写的一款基于bootstrap风格的弹框插件,暂时只有确认框.提示框.后续功能扩展.bug修改再更新. ;(function($){ //默认参数 var PARAMS; var DEFAULTP ...
- Linux上分析java程序的问题
通过日志看不出来的问题,可以通过看java的堆栈信息(dump文件)来看出一些端倪. 1. 找java的进程id.jdk/bin的目录 ps -ef | grep java 2. cd 到bin的目录 ...
- 利用nodejs搭建服务器,测试AJAX
最近学习了AJAX一直没有进行过测试,前今天了解了Noejs搭建本地服务器下就尝试了一下.通过AJAX请求的方式获取HTTP服务器返回数据的代码 首先创建一个serve.js的文件.并写入以下代码. ...
- 可提高工作效率的 PL/SQL Developer 设置
1.将Window List 列表展示出来并保存当前布局 ①Tools-->Windows List (展示窗口列表) ②Window-->Save Layout (保存当前布局) 2.设 ...
- PSP(11.24~11.30)
27号 类别c 内容c 开始时间s 结束e 中断I 净时间T 作业 构建执法.写博客 14:00 14:40 0m 40m 28号 类别c 内容c 开始时间s 结束e 中断I 净时间T java 编码 ...
- Tab切换
代码 <!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8&q ...
- XE8 & IOS开发之免费证书真机调试:开发证书、AppID、开发授权profile的申请,附Debug真机调试演示(XCode7 Beta版或以上版本适用,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,苹果发布Xcode ...
- 问题解决_(转载)在VisualStudio 2012上使用MVC3出现错误的解决办法
错误: 找 不到方 法:“System.Collections.Generic.Dictionary`2<System.String,BlockParser> System.Web.Raz ...
- 【原创翻译】初识Unity中的Compute Shader
一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...
- dos命令 禁用网络链接
获取所有的网络链接接口: C:\Users\Chris.JENNEY>netsh interface show interface Admin State State Type Interfa ...