关于使用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文件 ...
随机推荐
- linux shell if语句使用方法 [转载]
最精简的 if 命令的语法是: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUE ...
- poj2243+poj1915骑士问题
2243是骑士问题,八个格子的,BFS,因为要最短路经,所以没有用A*,A*跑不出来,太慢了,因为要搜索到所有解啊!一直更新最优,而BFS,一层一层搜索,第一次得到的便是最短的了!300格子,标记的话 ...
- SQL SERVER 2012 第五章 创建和修改数据表 の SQL SERVER中的对象名
[ServerName.[DataBaseName.[SchemeName.]]]ObjectName 服务器名,数据库名,模式名,对象名 其中模式是一个新出的坑爹的东西.
- HDU 6370 dfs+并查集
Werewolf Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- gitlab上fork的项目如何获取源更新
1.添加上游项目地址 git remote add upstream URL 2.查看远程仓库信息 可以看到上游项目地址已经添加进来了 git remote -v 3.获取上游项目更新 获取到的更新会 ...
- hdu6196 happpy happy happy (meet in middle + 剪枝)
题意 从1到n共计n(<=90)个物品,每个物品有一个价值a[i],儿子和爸爸轮流做游戏,儿子先手.儿子每次选价值最大的{最左边,最右边}的物品,如果价值一样大, 则选取最左边的物品. 爸爸每次 ...
- http://www.ybtsoft.com/
http://www.ybtsoft.com/ 可视化作流建模 http://www.ybtsoft.com/t3/bpm/ 慧都控件网 写一本关于互联网商业变现的书
- python读取大文件的方法
python计算文件的行数和读取某一行内容的实现方法 :最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的 ...
- swiper插件制作轮播图swiper2.x和3.x区别
swiper3.x仅仅兼容到ie10+.比較适合移动端. swiper3.x官网 http://www.swiper.com.cn/ swiper2.x能够兼容到ie7+.官网是http://swi ...
- org.json.JSONException: A JSONObject text must begin with '{' at character 1 of {解决方法
在使用java读取一个本地的json配置文件的时候,产生了这个异常:org.json.JSONException: A JSONObject text must begin with '{' at c ...