Java 使用jxl对Excel进行操作
一个作业需要对excel数据进行离散化,想起好像可以用java对excel数据进行处理,因此学习使用,
在网上也有很多人对这个内容解释,但是还是觉得有些杂,就自己整理了一些别人写的内容。
/************************************************正文啦*****************************************************/
在处理excel数据时候有两种方式:
jxl:一种是首先依据excel中的数据创建一个相应的实体类,将每一条数据视为一个对象,然后将对excel中的数据处理转成对对象的处理。
(支持.xls文件,excel2003版,好像最最新的jxl.jar可以支持2007版excel)
poi:一种是将每一条数据视为一个集合或者数组,然后再将整个数据视为一个整体。(支持excel.xls和excel.xlsx, 还支持word文件)
注:由于我自己写的是用jxl,所以主要讲jxl的使用
jxl.jar是通过java操作excel表格的工具类库;
下载地址:百度网盘链接:https://pan.baidu.com/s/1ceIT6oDRDGFott7b7u0Jgw 提取码:ed57
搭建环境
将下载后的文件解包,得到JXL.JAR,放入classpath,安装就完成了。如果包不能正常的加载,可以把你下载好的JXL.JAR包放入D:/JAVA/jre/lib/ext中
如果想在Eclipse的一个项目中导入JXL.JAR,在该项目上右键,点击“属性”, 类别那里选择”库“,点击"添加外部jar”在弹出的文件选择对话框选择你的jxl.jar
/******************************************************************************************************/
jxl.jar完美体现了面向对象的思想.简单列举几个常用类和接口
Workbook--对应一个excel文件
Sheet--对应一个sheet工作簿
Cell--对应一个cell单元格
/************************************创建一个文件***************************************************/
拟生成一个名为 “测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下
package test; import java.io.*;
import jxl.*;
import jxl.write.*;
public class ExcelOperater
{
public static void main(String args[]){
try{
//打开文件
WritableWorkbook book= Workbook.createWorkbook(new File("测试.xls"));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,"test");
//将定义好的单元格添加到工作表中
sheet.addCell(label);
/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
结果如图:

/*******************************************************读取文件*************************************************************/
package test; import java.io.*;
import jxl.*;
public class ReadXls{
public static void main(String args[]){
try{
Workbook book=Workbook.getWorkbook(new File("测试.xls"));
//获得第一个工作表对象
Sheet sheet=book.getSheet(0);
//得到第一列第一行的单元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
结果如图:

/*****************************************************在已经生成的Excel文件中添加一个工作表***********************************************/
package test; import java.io.*;
import jxl.*;
import jxl.write.*; public class ModifyXls{
public static void main(String args[]){
try{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File("测试.xls"));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=Workbook.createWorkbook(new File("测试.xls"),wb);
//添加一个工作表
WritableSheet sheet=book.createSheet("第二页",1);
sheet.addCell(new Label(0,5,"第二页的测试数据"));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
结果如图:

/********************************************************************修改文件内容**********************************************/
package Shopping; import java.io.File;
import java.io.FileInputStream; import jxl.Cell;
import jxl.CellType;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook; public class test{ public static void main(String args[]){{
try{
//找到要修改的表
FileInputStream is = new FileInputStream("购物篮数据.xls");
Workbook wb=Workbook.getWorkbook(is); Sheet st =wb.getSheet(0);//获取第一张sheet表
int stColumns = st.getColumns();//获取sheet表中所包含的的总列数
int stRows = st.getRows();//获取sheet表总所包含的总行数 //新建要写入数据的表,并指定路径
// jxl.Workbook 对象是只读的,所以如果要修改Excel,需要创建一个可写的副本,副本指向原Excel文件
WritableWorkbook wbook = Workbook.createWorkbook(new File("副本.xls"),wb);
WritableSheet wSheet = wbook.getSheet(0);
WritableCell wCell = null; //处理birth——year
for(int i=1; i<stRows; i++){
wCell = wSheet.getWritableCell(8,i);
int cell8 = (int)((NumberCell)wSheet.getCell(8,i)).getValue();
Label replace = null; if(cell8<1980){
replace = new Label(8,i,"老人家");//输入内容【列,行,值】
}
else if(cell8<1985){
replace = new Label(8,i,"80后");
}
else if(cell8<1990){
replace = new Label(8,i,"85后");
}
else if(cell8<1995){
replace = new Label(8,i,"90后");
}
else if(cell8<2000){
replace = new Label(8,i,"95后");
}
else{
replace = new Label(8,i,"00后"); } wSheet.addCell(replace);
wCell = wSheet.getWritableCell(8, i);
} wbook.write();
wbook.close(); }catch(Exception e)
{
System.out.println(e);
}
}
}
}
上面的内容前三个是从别人的代码里摘过来的。初学比较容易理解,第三个就是我自己的作业了。
我的数据可以下载:链接:https://pan.baidu.com/s/1iX3Sr0Vppqn4bvhKBsbG0w 提取码:jdog
有些内容我写的不是很详细,推荐一下我当时看的内容和poi的讲解
1:https://www.aliyun.com/jiaocheng/251324.html
2:https://blog.csdn.net/hjiacheng/article/details/53573679
3:https://blog.csdn.net/qq_30401659/article/details/50974575
4:https://www.cnblogs.com/mingforyou/p/3282922.html
如果有什么错的地方,请提醒我改正,谢谢!
Java 使用jxl对Excel进行操作的更多相关文章
- Java:JXL解析Excel文件
项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...
- java利用jxl实现Excel导入功能
本次项目实践基于Spring+SpringMvc+MyBatis框架,简单实现了Excel模板导出.和Excel批量导入的功能.实现过程如下:. 1.maven导入所需jar包 <depende ...
- Java 用jxl读取excel并保存到数据库(此方法存在局限,仅限本地电脑操作,放在服务器上的项目,需要把文件上传到服务器,详细信息,见我的别的博客)
项目中涉及到读取excel中的数据,保存到数据库中,用jxl做起来比较简单. 基本的思路: 把excel放到固定盘里,然后前段页面选择文件,把文件的名字传到后台,再利用jxl进行数据读取,把读取到的数 ...
- Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)
JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03 xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...
- Java中用JXL导出Excel代码详解
jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支 ...
- Java 使用 Jxl 实现 Excel 导入导出
开发过程中经常需要用到数据的导入导出功能,之前用的是POI,这次使用JXL,JXL相对于POI来说要轻量简洁许多,在数据量不大的情况下还是非常实用的.这里做一下使用JXL的学习记录.首先需要导入相应的 ...
- Java通过jxl读取Excel
package com.hd.all.test.testjava; import java.io.File; import java.io.IOException; import java.util. ...
- JAVA利用jxl读取Excel内容
JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03 xls格式的Excel. import java.io.File; import java.io.FileInp ...
- 记录-java(jxl) Excel导入数据库
本内容主要包括(文件上传.excel2003数据导入数据库)excel导入数据库功能需要jxl jar包支持 下面是文件上传的前端测试代码 <%@ page language="ja ...
随机推荐
- (转)Oracle EBS 有效银行账户取值 银行科目
SELECT ba.bank_account_id, --银行账户key ftv.territory_short_name, --国家 ftv.territory_code, --国家简称 cb.ba ...
- mondodb和mysql的区别
我想从安全性和数据量这两个方面进行阐述. mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成, MongoDB ...
- 2018-2019-2 20165335 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具 ...
- python selenium web自动化测试完整项目实例
问题: 好多想不到的地方,中间经历了一次重构,好蛋疼: xpath定位使用的不够熟练,好多定位问题,只能靠强制等待解决: 存在功能重复的方法,因为xpath定位不同,只能分开写,有时间可以继续优化: ...
- 区块链名词解析:ICO、IFO、IEO和IMO,分别是什么呢?
区块链名词解析:ICO.IFO.IEO和IMO,分别是什么呢?本部分给出了标准答案,但其相当枯燥乏味,建议快进. ICO(Initial Coin Offering),首次代币发行,指区块链项目首次向 ...
- 解析url成对象形式
请编写一个JavaScript函数parseQueryString,他的用途是把URL参数解析为一个对象 var url = "https://www.baidu.com/s?ie=utf- ...
- mybatis的collection查询问题以及使用原生解决方案的结果
之前在springboot+mybatis环境的坑和sql语句简化技巧的第2点提到,数据库的一对多查询可以一次查询多级数据,并且把拿到的数据按id聚合,使父级表和子级表都有数据. 但是这种查询,必然要 ...
- Job for network.service failed because the control process exited with error code
转自:https://blog.csdn.net/dongfei2033/article/details/81124465 今天在centOS 7下更改完静态ip后发现network服务重启不了,翻遍 ...
- 3、SpringBoot 集成Storm wordcount
WordCountBolt public class WordCountBolt extends BaseBasicBolt { private Map<String,Integer> c ...
- 字符和字符串在Java中的旅程
以下是个人对java中字符和字符串的见解,如有疏漏之处,还请不吝赐教. 下面通过一个简单的程序来说明字符和字符串在Java中的旅程. 以字符 ' 中 '为例, 它的GBK编码是2个字节:0xd6d0, ...