Excel导入
public static Collection importExcelByIs(InputStream inputstream,
List<CgFormFieldEntity> lists) {
Map<String, CgFormFieldEntity> fieldMap = ConvertDate(lists);
//返回的数据类型
List<Map<String, Object>> tObject = new ArrayList<Map<String,Object>>();
try {
// 将传入的File构造为FileInputStream;
// // 得到工作表
HSSFWorkbook book = new HSSFWorkbook(inputstream);
// // 得到第一页
HSSFSheet sheet = book.getSheetAt(0);
// // 得到第一面的所有行
Iterator<Row> row = sheet.rowIterator();
// 得到第一行,也就是标题行
Row title = row.next();
// 得到第一行的所有列
Iterator<Cell> cellTitle = title.cellIterator();
// 将标题的文字内容放入到一个map中。
Map titlemap = new HashMap();
// 从标题第一列开始
int i = 0;
// 循环标题所有的列
while (cellTitle.hasNext()) {
Cell cell = cellTitle.next();
String value = cell.getStringCellValue();
if (fieldMap.get(value)==null) {
throw new BusinessException("导入数据excel列名有不能识别的列");
}
titlemap.put(i, value);
i = i + 1;
}
// 用来格式化日期的DateFormat
Map<String, Object> retMap=null;
while (row.hasNext()) {
retMap= new HashMap<String, Object>();
// 标题下的第一行
Row rown = row.next();
// 行的所有列
Iterator<Cell> cellbody = rown.cellIterator();
int k = 0;
// 遍历一行的列
while (cellbody.hasNext()) {
Cell cell = cellbody.next();
// 这里得到此列的对应的标题
String titleString = (String) titlemap.get(k);
if (fieldMap.containsKey(titleString)) {
retMap.put(fieldMap.get(titleString).getFieldName(), getCellValueString(cell));
}
// 下一列
k = k + 1;
}
tObject.add(retMap);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return tObject;
}
//TODO huiyong excel日期格式处理默认如此,需要从数据库或者配置文件读取
public final static DateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
/**
* 得到某个格子的值 已经对过时方法进行更新
*
* @param cell
* 格子对象
* @return 格子的值
*/
public static String getCellValueString(Cell cell) {
if (cell == null) {
return null;
}
// 时间对象 特殊处理
int dataFormat = cell.getCellStyle().getDataFormat(); if (dataFormat == 14 || dataFormat == 178 || dataFormat == 180 || dataFormat == 181
|| dataFormat == 182) {
return getDateValue(cell);
}
String value = null;
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC :
value = new DecimalFormat("0.##########").format(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING :
// value = cell.getStringCellValue();
value = cell.getRichStringCellValue().toString();
break;
case Cell.CELL_TYPE_FORMULA :
value = String.valueOf(cell.getCellFormula());
break;
case Cell.CELL_TYPE_BLANK :
// value = String.valueOf(cell.getStringCellValue());
value = String.valueOf(cell.getRichStringCellValue().toString());
break;
case Cell.CELL_TYPE_BOOLEAN :
value = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR :
value = String.valueOf(cell.getErrorCellValue());
break;
}
return value;
}
/**
* 返回时间内的特殊时间格式 OFFICE2003
* @param cell
* @return
*/
private static String getDateValue(Cell cell){
return DEFAULT_DATE_FORMAT.format(cell.getDateCellValue());
}
/**
* 数据处理
*/
private static Map<String,CgFormFieldEntity> ConvertDate(List<CgFormFieldEntity> lists){
Map<String,CgFormFieldEntity> maps = new HashMap<String, CgFormFieldEntity>(); for (CgFormFieldEntity cgFormFieldEntity : lists) {
maps.put(cgFormFieldEntity.getContent(), cgFormFieldEntity);
}
return maps;
}
Excel导入的更多相关文章
- C# Excel导入、导出【源码下载】
本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入
系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...
- 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能
做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...
- (转)高效的将excel导入sqlserver中
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...
- 安全的将excel导入sqlite3的解决方案
最近在做一个小项目时,需要把一个excel中的数据保存到sqlite3数据库中以备后用,表中有字符也有数字,要用到特定的数据类型方便后续使用,参照网上的方法,将excel文件转换为csv文件后,在导入 ...
- 利用反射实现通用的excel导入导出
如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...
- C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法
C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法 使用C#导入 Excel数据到 DataTable,如果连接串中只写 Excel 8.0,则正常的字符列,数值列都没有问题,但 ...
- Excel导入导出的业务进化场景及组件化的设计方案(上)
1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...
- Excel 导入到Datatable 中,再使用常规方法写入数据库
首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库 ...
- nopi excel 导入
#region 从Excel导入 /// <summary> /// 读取excel ,默认第一行为标头 /// </summary> /// <param name=& ...
随机推荐
- Redis 主从+哨兵+监控 (centos7.2 + redis 3.2.9 )
环境准备: 192.168.0.2 redis01 主 192.168.0.3 redis02 从 192.168.0.4 redis03 从 Redis 主从搭建 一:下载并安装redis软件 ...
- 【Unix网络编程】chapter8基本UDP套接字编程
chapter8基本UDP套接字编程 8.1 概述 典型的UDP客户端/服务端的函数调用 8.2 recvfrom和sendto函数 #include <sys/socket.h> ssi ...
- Html5——视频标签使用
video标签: 上面的例子使用一个 Ogg 文件,适用于Firefox.Opera 以及 Chrome 浏览器.要确保适用于 Safari 浏览器,视频文件必须是 MPEG4 类型.video 元素 ...
- Linux架构分布式集群之基础篇
部署linux环境,安装jdk 1.安装rar命令行 wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gz由于在此目录下解压rar后linu ...
- vue build打包后css里的图片路径404不正确的问题
vue build打包后css里的图片路径404 在vue-cli项目中build/utils.js中找到如下代码块,添加 publicPath:’../../’ if (options.extrac ...
- 2013年第四届蓝桥杯JavaB组省赛试题解析
题目及解析如下: 题目大致介绍: 第一题到第四题是结果填空,方法不限只要得到最后结果就行 第五题和第六题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 第一题 ...
- spring揭密学习笔记(3)-spring ioc容器:Spring的IoC容器之BeanFactory
1. Spring的IoC容器和IoC Service Provider的关系 Spring的IoC容器和IoC Service Provider所提供的服务之间存在一定的交集,二者的关系如图4-1所 ...
- gentoo: startx: drmsetmaster failed: permission denied
今天更新了 xorg-server 之后, startx 就进不了 X了,但是可以用 sudo startx 进入 X,所以感觉很奇怪. 后来终于在 gentoo 官方论坛上面找到答案了. https ...
- JDK-1.8-CopyOnWriteSet
CopyOnWriteSet 看了下CopyOnWriteSet源码,底层使用的是CopyOnWriteList,根据底层的实现,每次读取都是N的复杂度.每次写也是N的复杂度.有个代码可以看一下, 来 ...
- C#面向对象基础2
一.属性 作用:保护字段,对字段的赋值取值进行限定 意思是在初始化对象的时候防止出现不是事实的违规操作 如将性别赋值为‘中’ 本质:两个方法 get方法和set方法. p ...