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 ...
随机推荐
- 帝国cms中 内容分页的SEO优化
关于内容页如果存在分页的话,我们想区分第一页和后面数页,当前的通用做法是在标题上加入分页码,帝国cms中如何做到呢.我们可以修改在e/class/functions.php中的源码.找到找到GetHt ...
- 2015-4-2的阿里巴巴笔试题:乱序的序列保序输出(bit数组实现hash)
分布式系统中的RPC请求经常出现乱序的情况.写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:123, ...
- WebUploader API
Uploader new Uploader( opts ) ⇒ Uploader 上传入口类. var uploader = WebUploader.Uploader({ swf: 'path_of_ ...
- ajax,json和$.each()
json返回的时候,只需要展示部分字段,如果是 ajax从后台获取结果处理,可以使用.select() 等处理结合匿名类,生成需要的字段的匿名类json字符串,返回前端,可以使用$.parseJson ...
- Linq语句基础
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Code for the Homework2
第二次作业,最近有点忙,一直没写,先发一下,关节角计算有点问题,后面抽时间改 #include<iostream> #include <Eigen/Dense> #includ ...
- 滤镜简单demo(转,供参考)
NSURL *iamgeUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"default" ...
- MVC EF异常-“序列化类型为 XX 的对象时检测到循环引用”
原因:在EF实体中,两个互为主外键关系的实体类的导航属性相互引用. 解决方法一:删除一个不需要的类的导航属性 方法二:使用DTO模型 方法三:直接返回需要的属性(不能包括相互引用的属性)
- string.Equals 比较2个字符串是否相同忽略大小写
bool res = string.Equals(str1, str2, StringComparison.CurrentCultureIgnoreCase)
- CSRF注入式攻击防御讲解
0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/PO ...