//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表格解析的更多相关文章

  1. node.js 操作excel 表格与XML文件常用的npm

    在日常工作中会经常用到把一些excel表格文件转化为json,xml,js等格式的文件,下面就是我在日常中用到的这些npm. 1.node-xlsx: node-xlsx可以把excel文件转化为上面 ...

  2. JXL解析Excel表格内容到数据库

    java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...

  3. Java使用POI解析Excel表格

    概述 Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能. 常见的Excel格式有xls和xlsx.07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx ...

  4. 使用PHPExcel解析Excel表格

    安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...

  5. java后台读取/解析 excel表格

    需求描述 前台需要上传excel表格,提交到后台,后台解析并返回给前台,展示在前台页面上! 前台部分代码与界面 <th style="padding: 7px 1px;width:15 ...

  6. java解析导入excel表格转为实体类javabean,根据实体类中的中文名称

    最近公司需求解析excel,一开始使用poi做的挺好的,后来直接上了几十万条数据的excel文件,内存直接溢出了,网上查到apache poi还提供了专门处理海量数据的方法,使用sax解析,果然用了内 ...

  7. NPOI操作EXCEL(三)——反射机制进行excel表格数据的解析

    我们先来回忆回忆上篇文章讲到的通过xml配置文件实现excel批量模板解析的整体思路: 1.对每个excel模板制定xml配置规则集,实现xml配置文件的解析服务 2.为每个excel模板制定DTO, ...

  8. php解析Excel表格并且导入MySQL数据库

    最近根据客户需求,需要增加一个导入Excel表格的功能,Excel中存放的是知识库中医知识的分类体系目录.是在thinkphp框架下编写的代码,用的是phpexcel第三方包.测试环境用的是xampp ...

  9. VS2010 C++ 操作Excel表格的编程实现

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...

随机推荐

  1. 自己写的基于bootstrap风格的弹框插件

    自己写的一款基于bootstrap风格的弹框插件,暂时只有确认框.提示框.后续功能扩展.bug修改再更新. ;(function($){ //默认参数 var PARAMS; var DEFAULTP ...

  2. Linux上分析java程序的问题

    通过日志看不出来的问题,可以通过看java的堆栈信息(dump文件)来看出一些端倪. 1. 找java的进程id.jdk/bin的目录 ps -ef | grep java 2. cd 到bin的目录 ...

  3. 利用nodejs搭建服务器,测试AJAX

    最近学习了AJAX一直没有进行过测试,前今天了解了Noejs搭建本地服务器下就尝试了一下.通过AJAX请求的方式获取HTTP服务器返回数据的代码 首先创建一个serve.js的文件.并写入以下代码. ...

  4. 可提高工作效率的 PL/SQL Developer 设置

    1.将Window List 列表展示出来并保存当前布局 ①Tools-->Windows List (展示窗口列表) ②Window-->Save Layout (保存当前布局) 2.设 ...

  5. 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 编码 ...

  6. Tab切换

    代码 <!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8&q ...

  7. XE8 & IOS开发之免费证书真机调试:开发证书、AppID、开发授权profile的申请,附Debug真机调试演示(XCode7 Beta版或以上版本适用,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,苹果发布Xcode ...

  8. 问题解决_(转载)在VisualStudio 2012上使用MVC3出现错误的解决办法

    错误: 找 不到方 法:“System.Collections.Generic.Dictionary`2<System.String,BlockParser> System.Web.Raz ...

  9. 【原创翻译】初识Unity中的Compute Shader

    一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...

  10. dos命令 禁用网络链接

    获取所有的网络链接接口: C:\Users\Chris.JENNEY>netsh interface show interface Admin State State  Type Interfa ...