//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. TortoiseSvn客户端出现Http state 405 'Method Not Allowed' 的解决办法

    原文地址链接 http://stackoverflow.com/questions/28247512/visualsvn-server-3-2-unexpected-http-status-405 就 ...

  2. Disconf

    通常我们会做如下配置:(disconf 2.6.21) <!-- 一次扫描 --> <bean id="disconfMgrBean" class="c ...

  3. SqlCommand执行带GO的SQL脚本文件

    今天工作中遇到了这个问题,其实只要把GO替换成“;”就行了,其它人写的例子用Split来拆分这一个脚本文件的内容,完全没有必要.希望对你有用.

  4. ABP的第一个程序和遇到的一些问题

    ABP在这里就不多介绍了.在这篇文章中主要介绍使用模板生成的ABP项目使用遇到的一些问题. 1.首先在http://www.aspnetboilerplate.com/ 官方网站上创建一个模板项目, ...

  5. hadoop 日志分析

    1:在每一个tomcat服务器上,生成的日志目录中,在java中用定时器每天将当天的日志上传到hadoop中 (技术要点:quatz+hadoop-client)具体的目录动态的采用时间品名 2:ha ...

  6. OCP认证之Oracle的SQL语言基础(一)

    一.Oracle命令类别 数据操纵语言(DML):select;insert;delete;update;merge 数据定义语言(DDL):create;alter;drop;truncate 事物 ...

  7. onethink入门笔记(一)

    由于公司需求所以大概花了一个星期搞了一个一个基于onethink的数据管理平台demo不得不说onethink这个基于thinkphp3.2.3的框架还是很棒的 让我这个没基础过php的人也能在一星期 ...

  8. Delphi 调用Dll的两种方式

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  9. 永久修改 CMD 的 PROMPT 显示结果/给cmd命令显示加上运行时间

    1.环境 windows10 系统 2.打开 cmd ,快捷键 Ctrl + x 然后a 3.输入 REG ADD "HKLM\SYSTEM\CurrentControlSet\Contro ...

  10. maven基本用法

    一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录(本 ...