关于使用jxl去读写Excel文件
1.引入maven依赖
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
2.测试方法
private static final String BOX_PATH = "C:\\demo\\box.xls";
private static final String LAMP_1_PATH = "C:\\demo\\lamp1.xls";
private static final String LAMP_2_PATH = "C:\\demo\\lamp2.xls";
private static final String FILE_PATH = "C:\\demo\\test.xls";
@Test
public void test() {
System.out.println("开始时间: ==> " + new Date().getTime()); // 读取Excel
List<List<Object>> lists = readExcel(); // 写出Excel
writeExcel(lists); System.out.println("结束时间: ==> " + new Date().getTime());
}
3.读取Excel
public List<List<Object>> readExcel() {
try {
// 创建输入流, 读取box.xls
InputStream box = new FileInputStream(BOX_PATH);
// 获取box.xls文件对象
Workbook boxExcel = Workbook.getWorkbook(box);
// 获取box.xls文件的指定工作表, 默认的第一个
Sheet boxSheet = boxExcel.getSheet(0);
// 定义一个集合存放box结果
List<Map<String, String>> boxList = new ArrayList<>();
// 读取每一行
for (int i = 0; i < boxSheet.getRows(); i++) {
// 存放每一行结果
Map<String, String> boxCells = new HashMap<>();
String key = "";
String val = "";
// 读取每一列
for (int j = 0; j < boxSheet.getColumns(); j++) {
// box.xls文件的第I行第J列
Cell boxCell = boxSheet.getCell(j, i);
// 将boxNo作为value
if (j == 0) {
val = boxCell.getContents();
}
// 将boxName作为key
if (j == 1) {
key = boxCell.getContents();
}
}
boxCells.put(key, val);
boxList.add(boxCells);
}
// 读取完box.xls后释放资源
boxExcel.close();
// 定义一个集合存放所有符合条件的结果
List<List<Object>> lampList = new ArrayList<>();
// 创建输入流, 读取lamp1.xls
InputStream lamp_1 = new FileInputStream(LAMP_1_PATH);
// 获取lamp1.xls文件对象
Workbook lamp_1_Excel = Workbook.getWorkbook(lamp_1);
// 获取lamp1.xls文件的指定工作表, 默认的第一个
Sheet lamp_1_Sheet = lamp_1_Excel.getSheet(0);
// 读取lamp.xls, 将所有的符合条件的结果存放到集合里面
for (int i = 0; i < lamp_1_Sheet.getRows(); i++) {
for (int j = 0; j < lamp_1_Sheet.getColumns(); j++) {
Cell lampCell = lamp_1_Sheet.getCell(j, i);
// 当前列是第3列时
if (j == 2) {
Integer num = Integer.valueOf(lampCell.getContents());
if (num >= 250) {
List<Object> lampCells = new ArrayList<>();
String lampNo = lamp_1_Sheet.getCell(0, i).getContents();
String boxName = lamp_1_Sheet.getCell(1, i).getContents();
String rawData = lamp_1_Sheet.getCell(2, i).getContents();
// 拿取box数据
for (Map<String, String> map : boxList) {
Set<String> keySet = map.keySet();
for (String key : keySet) {
if (boxName.equals(key)) {
String val = map.get(key);
// boxNo
lampCells.add(val);
// boxName
lampCells.add(key);
// lampNo
lampCells.add(lampNo);
// 灯泡个数
lampCells.add(1);
// 总功率
lampCells.add(num);
// 原始数据
lampCells.add(rawData);
}
}
}
lampList.add(lampCells);
}
}
}
}
// 读取完lamp.xls后释放资源
lamp_1_Excel.close();
// 创建输入流, 读取lamp1.xls
InputStream lamp_2 = new FileInputStream(LAMP_2_PATH);
// 获取lamp1.xls文件对象
Workbook lamp_2_Excel = Workbook.getWorkbook(lamp_2);
// 获取lamp1.xls文件的指定工作表, 默认的第一个
Sheet lamp_2_Sheet = lamp_2_Excel.getSheet(0);
// 读取lamp.xls, 将所有的符合条件的结果存放到集合里面
for (int i = 0; i < lamp_2_Sheet.getRows(); i++) {
for (int j = 0; j < lamp_2_Sheet.getColumns(); j++) {
Cell lampCell = lamp_2_Sheet.getCell(j, i);
// 当前列是第3列时
if (j == 2) {
Integer num = 0;
String contents = lampCell.getContents();
String[] split = contents.split("-");
for (String str : split) {
Integer integer = Integer.valueOf(str);
num += integer;
}
if (num >= 400) {
List<Object> lampCells = new ArrayList<>(); // 存放每一行符合条件的结果
String lampNo = lamp_2_Sheet.getCell(0, i).getContents();
String boxName = lamp_2_Sheet.getCell(1, i).getContents();
String rawData = lamp_2_Sheet.getCell(2, i).getContents();
// 拿取box数据
for (Map<String, String> map : boxList) {
Set<String> keySet = map.keySet();
for (String key : keySet) {
if (boxName.equals(key)) {
String val = map.get(key);
// boxNo
lampCells.add(val);
// boxName
lampCells.add(key);
// lampNo
lampCells.add(lampNo);
// 灯泡个数
lampCells.add(split.length);
// 总功率
lampCells.add(num);
// 原始数据
lampCells.add(rawData);
}
}
}
lampList.add(lampCells);
}
}
}
}
// 读取完lamp.xls后释放资源
lamp_2_Excel.close();
return lampList;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
4.写出Excel
public void writeExcel(List<List<Object>> arrayLists) {
try {
String[] title = {"序号", "rtuNo", "rtuName", "灯杆name", "盏数", "总功率", "原始数据", "计算时间"};
// 新建立一个jxl文件
OutputStream os = new FileOutputStream(FILE_PATH);
// 创建Excel工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
// 添加第一个工作表并设置第一个Sheet的名字
WritableSheet sheet = workbook.createSheet("sheet", 0);
Label label;
for (int m = 0; m < title.length; m++) {
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z, 在Label对象的子对象中指明单元格的位置和内容
label = new Label(m, 0, title[m], getHeader());
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
}
for (int i = 0; i < arrayLists.size(); i++) {
Number number = new Number(0, i + 1, i + 1);
sheet.addCell(number);
List list = arrayLists.get(i);
for (int j = 0; j < list.size(); j++) {
label = new Label(j + 1, i + 1, String.valueOf(list.get(j)));
sheet.addCell(label);
}
// 事件类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String newdate = sdf.format(new Date());
label = new Label(7, i + 1, newdate);
sheet.addCell(label);
}
// 写入数据
workbook.write();
// 关闭文件
workbook.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
5.特殊格式
public static WritableCellFormat getHeader() {
WritableFont font = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD);//定义字体
try {
font.setColour(Colour.BLUE);//蓝色字体
} catch (WriteException e1) {
e1.printStackTrace();
}
WritableCellFormat format = new WritableCellFormat(font);
try {
format.setAlignment(jxl.format.Alignment.CENTRE);//左右居中
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//上下居中
format.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);//黑色边框
format.setBackground(Colour.YELLOW);//黄色背景
} catch (WriteException e) {
e.printStackTrace();
}
return format;
}
box.xls

lamp1.xls

lamp2.xls

...
关于使用jxl去读写Excel文件的更多相关文章
- C++读写EXCEL文件OLE,java读写excel文件POI 对比
C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...
- 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...
- MFC vs2012 Office2013 读写excel文件
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...
- Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- Python使用读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- 【转发】Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- C/C++读写excel文件 的几种方式
因为有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看. http://blog.csdn.net/fullsail/article/details/8449448 C++读取Exc ...
- 《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
1.简介 前面介绍了POI可以操作excel,也简单的提到另一个操作excle的工具,本篇介绍一个其他的可以操作excel的工具,但是这个工具有一个前提,excel文件版本只能是97-2003版本,如 ...
- 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...
随机推荐
- mybatis查询返回null解决方案
mybatis查询返回null解决方案: 问题:查询出的列与javabean中的字段名不一致. 解决方案: 1.将javabean中的字段改为和查询出的列名一致: 2.将sql加入as改变列名,和ja ...
- [Vijos] 河蟹王国
描述 河蟹王国有一位河蟹国王,他的名字叫羊驼.河蟹王国富饶安定,人们和谐相处.有一天,羊驼国王心血来潮,想在一部分人中挑出最和谐的人.于是,羊驼国王将他的子民排成了一列(==!!b汗~好长呀).每个人 ...
- Python基础教程笔记——第4章:字典
字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...
- python-web apache mod_python 模块的安装
安装apache 下载mod_python 编译安装 测试 下载mod_python,下载地址:mod_python 在GitHub 上面, 下载之后:目录结构如下: 安装依赖: #查找可安装的依赖 ...
- Swift--方法(函数)
方法是执行特殊任务的自包含代码块.你可以给方法名字来表示它的功能,而且在需要的时候调用这个名字的方法来执行它的任务. Swift方法的语法表达很灵活,从类似c的没有参数名的方法到oc复杂的带有名字和参 ...
- python之-微信开发学习
微信公众平台技术文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432# 注意,最好以python3 运行,中文 ...
- JVM(零):走入JVM
JVM(零):走入JVM 本系列主要讲述JVM相关知识,作为本系列的第一篇文章,本文从Java为什么是一个跨平台的语音开始介绍,逐步引入Java虚拟机的概念,并给出一个JVM相关知识图谱,可以让读者从 ...
- Office2010,PPT,EXCEL如何插入日历控件
1 在Office2010中插入其他控件,然后找到日历控件 2 十字架随便在Excel中绘制一下,得到一个日历控件,注意此时还是在设计模式下,在设计模式下日历控件不是正常状态,你还是可以双击这个控 ...
- 【Mongodb教程 第一课 补加课1 】windows7 下安装mongodb 开启关闭服务
mongodb在2.2版本开始就不支持windows xp了(我想现在用xp的应该也是带着情怀的一部分人吧,我只是一个工匠而已),windows下server8 R2,64位,32位,只是32位只支持 ...
- Atitit. 软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动、停止、重新启动
Atitit. 软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动.停止.重新启动 能够通过"netstat ...