关于使用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文件 ...
随机推荐
- 字符串常量与const常量内存区(——选自陈皓的博客)
1. 一个常见的考点: char* p = "test"; 那么理利用指针p来改变字符串test的内容都是错误的非法的. 例如: p[0] = 's'; strcpy(p, &qu ...
- gcc,gdb基础学习2
gdb调试: 源文件:test.cc >>g++ -g test.cc -o test.o 这里需要参数-g,因为接下来要使用gdb进行调试,生成目标文件test·o 因为需要将调试信息 ...
- Python()- 面向对象的组合用法
面向对象的组合用法 一个类中以另一个类的对象作为数据属性(一个类中引用另一个类的对象)一种 "有" 的关系: 比如:定义 1个人类 & 1个武器类 然后 张三 有 枪 李四 ...
- iOS 自动识别URL(链接)功能的实现
功能需求 在做“沃迪康”聊天功能时,甲方要求发送的网址要自动识别.并点击能自动跳转 功能难点 在实现过程中,所有的文字都是动态获取的,设置富文本属性时,不能按照常规的方法 解决方式 如果只是文字, ...
- POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
题意: 给了n种硬币的名称,给了m种硬币间的转换关系. 从任意兑换地点开始兑换,看是否能够通过兑换的方式增加金钱. 思路: 用SPFA不断对各个点进行松弛操作,寻找正权值的环.如果找到则输出Yes. ...
- HDU 1558
输入线段的两个短点,如果线段相交那么他们属于一个集合,查看第i条线段所在的集合有几条线段. 好久没码码了,总是各种蠢. 首先找出两条直线的方程,求解相交点的横坐标,然后看是不是在线段内部. 没有注意题 ...
- 2017多校Round4(hdu6067~hdu6079)
补题进度:10/13 1001 待填坑 1002(kmp+递推) 题意: 有长度为n(<=50000)的字符串S和长度为m(m<=100)的字符串T,有k(k<=50000)组询问, ...
- java-过滤器(Filter)
在javaweb开发中,项目中都会包含一些过滤器(Filter),主要用于web服务器对资源的管理控制,如静态资源文件.jsp页面访问等.我们可以使用过滤器实现一些特殊的功能,如常见的过滤敏感词汇(替 ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown error 1054
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown error 1054 这个错误困扰了我一个下午 插入数据总是错误 ...
- MongoDB学习day04--NodeJs操作数据库增删改查
一.在Nodejs中使用Mongodb Nodejs需要引入的包 npm install mongodb --save -dev 或者使用镜像 cnpm install mongodb --save ...