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进程间通信IPC学习笔记之同步二(SVR4 信号量)
Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
- oracle创建表空间、用户
创建表空间 create tablespace '<数据库名>' datafile '<存储路径>' size 500M default storage (initial 20 ...
- 判断webpart类型 How can I tell what type a web part is?
using(new SPSite("http://mysite/myweb").OpenWeb()){ //give relative path of the webpartpag ...
- 微信支付-b
微信支付 APP端开发步骤(传送门):https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 1.首先下载最新的微信支付的SDK包 ...
- 1588: [HNOI2002]营业额统计 - BZOJ
Description营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...
- 【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法
[KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一 ...
- 认识OD的两种断点
OllyDBG从原理上来区分,有两种不同的断点:软件断点和硬件断点. 也许会有朋友说那不是还有内存断点吗? 内存断点严格来说是属于一种特殊的软件断点. 内存断点: 内存断点每次只能设置一个,假如你设置 ...
- javascript禁用与启用select标签(实用版)
<html><head><script type="text/javascript">function disable() { docume ...
- WCF 绑定的选择
选自<WCF服务编程中文版> 第一章 WCF基础 绑定服务之间的通信方式是多种多样的,有多种可能的通信模式.包括:同步的请求/ 应答(Request/Reply)消息,或者异步的“即发即弃 ...
- spark storage之SparkEnv
此文旨在对spark storage模块进行分析,整理自己所看所得,等以后再整理. ok,首先看看SparkContext中sparkEnv相关代码: private[spark] def creat ...