JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好;而JXL解析简单方便,对中文支持比较好。
工作中解析Excel内容上传到数据库常用JXL,而从数据库导出数据到Excel常用POI
下面是一个JXL解析Excel的一个简单案例
1.添加jxl的架包
下载地址:jxl.zip
2.解析Excel表格内容到一个集合
/**
* 解析Excel表格
* @param ExcelURI 表格文件的路径
* @return 表格内容的集合
*/
public static List<List<String>> readExcel(String ExcelURI){
//用于存放所有的行
List<List<String>> list=new ArrayList<List<String>>();
Workbook book = null;
try {
// 读取现有的工作薄
book = Workbook.getWorkbook(new File(ExcelURI));
// 获取工作薄中所有的表对象
Sheet[] sheets = book.getSheets();
for (int i = 0; i < sheets.length; i++) {
//获取表当前表中的总行数
int rowSum=sheets[i].getRows();
for (int j = 0; j < rowSum; j++) {//如果不想读取表格第一行就把j的初始值设置为1
//获取当前行所有单元格对象
Cell[] rowCells=sheets[i].getRow(j);
//用于存放当前行中所有的单元格内容
List<String> strs=new ArrayList<String>();
for (int k = 0; k < rowCells.length; k++) {//如果不想读取表格第一列就把k的初始值设置为1
//获取当前单元格对象
CellType ct=rowCells[k].getType();
String content=null;
if (ct.equals(CellType.DATE)) {
//日期 类型的处理 ,如果不处理的话,读取的时候表格中的2014-03-25 会读取成14-03-25
DateCell dc = (DateCell) rowCells[k];
Date jxlDate = dc.getDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
content=sdf.format(jxlDate);
}else{
//不是日期类型的一律当做字符串处理
content=rowCells[k].getContents();
}
strs.add(content.trim());
}
list.add(strs);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
book.close();
}
return list;
}
3.批量插入集合数据到数据库
/**
* 批量插入集合数据到数据库
* @param sql 要执行的sql插入语句
* @param list Excel文件内容集合
* @return 插入是否成功
*/
public boolean insertBatch(String sql,List<List<String>> list) {
Connection conn=super.getConnection();
PreparedStatement pstmt=null;
boolean mark=true;
try {
pstmt=conn.prepareStatement(sql);
// 关闭JDBC自动执行事务处理
conn.setAutoCommit(false);
// 一个list代表一行,每行中都有一个参数集合list
for (int i = 0; i < list.size(); i++) {
List<String> cells=list.get(i);
for (int j = 0; j <cells.size(); j++) {
pstmt.setString(j+1,cells.get(j));
}
pstmt.addBatch();
}
pstmt.executeBatch();
//命令执行完了就手动提交事务
conn.commit();
//清空此 Statement 对象的当前 SQL 命令列表。
pstmt.clearBatch();
} catch (SQLException e) {
try {
conn.rollback();
mark=false;
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
super.closeAll(null, pstmt, conn);
}
return mark;
}
使用executeBatch能够大大提高插入的效率
注意点:1、注意解析表格的时候要明确表格的哪些行、哪些列是不需要放到集合中的
2、注意表格中单元格的内容长度和数据库中字段的长度是否相符,如果数据库中字段长度比较小会出现java.sql.DataTruncation: Data truncation异常
3、单个Excel表格中的内容不要太多,保持在5M以内
本文章出自:腾飞工作室 转载请注明出处
JXL解析Excel表格内容到数据库的更多相关文章
- java中使用jxl导出Excel表格详细通用步骤
该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...
- 使用PHPExcel解析Excel表格
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...
- C# 读取Excel表格内容,以及NPOI的使用
在实际的开发中,我们可能需要读写word或者Excel的内容,在我开发的项目中,需要读取Excel的内容,并将相对应的内容存储到数据库中,这里简单跟大家分享一下,希望能够帮助一些人. 我相信在读写wo ...
- php网址显示excel表格内容
/** * excel表格内容在网页中显示 * * 首先需要下载PHPExcel 工具包 * 网址: http://phpexcel.codeplex.com/releases/view/119187 ...
- Java:JXL解析Excel文件
项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...
- jxl解析excel时,处理中文乱码问题
jxl解析excel时,处理中文乱码问题 一般出现较多的问题是,当exce中包含了中文或特殊字符时,在解析时候就会出现乱码现象. 解决方法为: InputStream in = new FileInp ...
- 跨平台信息获取小工具第三版本(增加了继承、多线程、异常处理模块、excel表格内容剔除空格)
# coding=utf-8 import threadingimport paramikoimport osimport timeimport xlrdimport xlwtimport openp ...
- 用jxl解析excel内容
需要导入jxl.jar 下方表格为excel中内容: 序号 姓名 性别 生日 地址 1 测试1 男 1990-1-1 北京朝阳区 2 测试2 女 1998-2-2 北京海淀 3 测试3 男 1999- ...
- JXL包大解析;Java程序生成excel文件和解析excel文件内容
最近需求变化,需要把excel导入 我以前没有做过,所以我查了一些资料 和参考别人的代码 以下是多种方式: import java.io.File; import java.io.FileInputS ...
随机推荐
- 【信息学奥赛一本通】第三部分_队列 ex2_3produce 产生数
给出一个整数n(n<=2000)(代码可适用n<=10^31)和k个变换规则(k<=15). 规则:1.1个数字可以变换成另1个数字: 2.规则中右边的数字不能为零. BFS #in ...
- 实现Linux select IO复用C/S服务器代码
已在ubuntu 下验证可用 服务器端 #include<stdio.h>#include<unistd.h>#include<stdlib.h>#include& ...
- java实现.net中的枚举
Java 和 .net中的枚举不一样,在.net中,枚举是属于值类型的,而在java中确实引用类型的(其实就是一个特殊的类,enum默认集成java.lang.Enum类),所以在java中操作枚举类 ...
- mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法
23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...
- eclipse *.vm 文件,语法高亮
eclipse *.vm 文件,语法高亮按如下方式不起作用,原因不明.设置文件打开时使用的编辑器General>>Editors>>File Associations 下述方试 ...
- springMVC+MyBatis+Spring 整合(3)
spring mvc 与mybatis 的整合. 加入配置文件: spring-mybaits.xml <?xml version="1.0" encoding=" ...
- [转载]线程间操作无效: 从不是创建控件“ListBox1”的线程访问它
解决方法有两种: 1.Control.CheckForIllegalCrossThreadCalls = false 2.用委托解决线程安全问题
- The 11th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Pokemon Master
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3776 题意:比较两组数据的总和大小. #include <iostr ...
- cf 357C
比赛的时候纯暴力超时了 看了别人的代码 set容器类做的 stl里还是有很多好东西的 /**************************************************** ...
- wordpress如何删除没有文章的tags标签
wordpress站点除了可以按博客category分类外,还可以在写文章的时候适当添加tags标签(当然,if you are lazy,哈哈,可以安装auto tag插件来实现),发布的posts ...