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文件的更多相关文章

  1. C++读写EXCEL文件OLE,java读写excel文件POI 对比

    C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...

  2. 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)

    1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...

  3. MFC vs2012 Office2013 读写excel文件

    近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...

  4. Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  5. Python使用读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  6. 【转发】Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  7. C/C++读写excel文件 的几种方式

    因为有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看. http://blog.csdn.net/fullsail/article/details/8449448 C++读取Exc ...

  8. 《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)

    1.简介 前面介绍了POI可以操作excel,也简单的提到另一个操作excle的工具,本篇介绍一个其他的可以操作excel的工具,但是这个工具有一个前提,excel文件版本只能是97-2003版本,如 ...

  9. 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)

    1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...

随机推荐

  1. git push ‘No refs in common and none specified’doing nothing问题解决

    git push ‘No refs in common and none specified’doing nothing问题解决 输入git push origin master即可解决问题

  2. hiho一下 第四十五周 博弈游戏·Nim游戏·二 [ 博弈 ]

    传送门 题目1 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和Bob这一次准备玩一个关于硬币的游戏:N枚硬币排成一列,有的正面 ...

  3. Linux MTD (Memory Technology Device) subsystem analysis -For Atheros char device

    Linux MTD (Memory Technology Device) subsystem analysis For Atheros char device 读了Linux MTD 源代码分析 对这 ...

  4. OC-runtime 的温习

    -.runtime简介 runtime简称运行时,OC就是运行时机制,也就是运行时的一些机制,其中最主要的是消息机制: 对于C语言,函数的调用在编辑的时候,会决定调用哪个函数: 对于OC的函数,属于动 ...

  5. 推荐10+必备的 WordPress 常用插件

    众多的WordPress插件,使得WordPress的功能得到了较大的扩展,但是也正是由于过多的插件,导致我们很难选择所需的插件.今天,倡萌就根据自己的经验,给WordPress新手推荐一些常用的插件 ...

  6. 【Java源码】集合类-优先队列PriorityQueue

    一.类继承关系 public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serial ...

  7. java 基础 1 final关键字

    1. final关键字 数据:声明数据为常量,对于基本类型final使数值不变,对于引用类型final使引用不变,但引用所指向的值是可以改变的,例如       final StringBuffer ...

  8. CSS 遮罩层、滑出页面

    <style> .panel_bak { position:fixed; bottom:0; display:none; width:100%; margin:0px; padding:5 ...

  9. Mac BOOK PRO U盘安装windows7、8及8.1

    http://v.youku.com/v_show/id_XMTI1NjgzMzU0NA==.html http://jingyan.baidu.com/article/1709ad80b3d2f44 ...

  10. SAS学习笔记 - R的数据操作

    1.对象 1.1 对象及其内在属性 R中的处理数据就是对象,每个对象可以包含多个元素.对象有两个内在属性:类型和长度.类型是对象元素的基本种类,共四种:数值型,字符型,复数型和逻辑型.对象的类型和长度 ...