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. CodeForces - 320B Ping-Pong (Easy Version)

    题目最开始 完全不懂 配合案例也看不懂-_- 总之就是用传递性 问能否从a区间到b区间 dfs(x,y) 走遍与第x区间所有的 联通区间 最后检验 第y区是否被访问过 是一道搜索好题 搜索还需加强 # ...

  2. 内存管理——(exceptional C++ 条款9,条款10)

    C++的各个内存区域: (1)常量数据(const data)区 常量数据区存储的是字符串等在编译期间就能确定的值,在整个程序的生命周期内,这里的数据都是可用.区域内所有的数据都是 只读的. (2)栈 ...

  3. 50个必备的实用jQuery代码段(转载)

    本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...

  4. 51nod 1499 (最小割)

    题意 分析 将一些点分成两个集合,很明显的最小割问题 设一个S.T,和S相连的点表示在B集合中,和T相连的点表示在A集合中 因为原题是完美值最大,我们转换一下,变成损失的价值最小,那么就是最小割问题了 ...

  5. python字符串连接方法效率比较

    方法1:直接通过加号(+)操作符连接 1 website = 'python' + 'tab' + '.com' 方法2:join方法 1 2 listStr = ['python', 'tab',  ...

  6. 从CLR GC到CoreCLR GC看.NET Core对云原生的支持

    内存分配概要 前段时间在园子里看到有人提到了GC学习的重要性,很赞同他的观点.充分了解GC可以帮助我们更好的认识.NET的设计以及为何在云原生开发中.NET Core会占有更大的优势,这也是一个程序员 ...

  7. javascript 自定义错误处理

    php 中是可以自定义程序的错误和异常处理函数的(handler).于是,我在想,javascript 中是否也存在和PHP中一样的异常和错误处理函数呢? try{}catch(){} 这种捕捉异常和 ...

  8. Word 2013安裝字典

    不必從內建的字典中開始,Word 2013 可將您連結到 Office 市集,方便您挑選免費的字典,或從包括多語字典的字典集合中購買. 若要選擇並安裝您想要的字典,請以滑鼠右鍵按一下任何單字,並按一下 ...

  9. B-Tree 索引和 Hash 索引的对照

    对于 B-tree 和 hash 数据结构的理解可以有助于预測不同存储引擎下使用不同索引的查询性能的差异.尤其是那些同意你选择 B-tree 或者 hash 索引的内存存储引擎. B-Tree 索引的 ...

  10. [LeetCode] Contains Duplicate(II,III)

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...