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 ...
随机推荐
- Linux多进行之fork
#include <unistd.h> //定义该函数 #include <sys/types.h> //定义函数的返回类型pid_t /* 功能:复制进程 参数:无 返回值: ...
- 在后台对GameObject进行"创建"||"删除"动作
在后台对GameObject进行"创建"||"删除"动作 建立 public GameObject Pre;//在编辑器中用来绑定的Prefabs public ...
- Postgresql 技巧
备份 pg_dump -f "F:/dump.sql"<file name> -U postgres<database name> -h 10.38.197 ...
- seo 优化 仅针对 来拍呀www.laipaiya.com(一)
加入百度统计代码:http://tongji.baidu.com/ 查看百度统计优化分析->seo建议 对每个页面的meta标签做修改 首页 title :来拍呀 - | 折扣好房你就来拍呀 k ...
- (转)inux Read系统调用
转载网址:http://my.oschina.net/haomcu/blog/468656 1. 什么是系统调用 2. read系统调用在内核空间的处理层次模型 3. 相关的内核数据结构 4. rea ...
- 1053: [HAOI2007]反素数ant - BZOJ
Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数 ...
- yum安装gcc
如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上.但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦 ...
- mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)
感谢:http://www.111cn.net/database/110/d45124323da8d2d87b80f78319987eda.htm 查看同主题的另一篇博客:http://blog.cs ...
- [转载]面向对象设计(OOD)思想(C#)
有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔.为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD.设计模式及重构.通过下面的代码,详细地阐述面向对象设计思想. 一.传统过程化设计思 ...
- hdu 1018
数学题 用的这个方法比较烂 g++超时 c++ 406ms /******************************************************************* ...