关于使用jxl去读写Excel文件

1.引入maven依赖

1 <dependency>
2     <groupId>net.sourceforge.jexcelapi</groupId>
3     <artifactId>jxl</artifactId>
4     <version>2.6.12</version>
5 </dependency>

2.测试方法

 1 private static final String BOX_PATH = "C:\demo\box.xls";
 2 private static final String LAMP_1_PATH = "C:\demo\lamp1.xls";
 3 private static final String LAMP_2_PATH = "C:\demo\lamp2.xls";
 4 private static final String FILE_PATH = "C:\demo\test.xls";
 5 @Test
 6 public void test() {
 7     System.out.println("开始时间: ==> " + new Date().getTime());
 8 
 9     // 读取Excel
10     List<List<Object>> lists = readExcel();
11 
12     // 写出Excel
13     writeExcel(lists);
14 
15     System.out.println("结束时间: ==> " + new Date().getTime());
16 }

3.读取Excel

  1 public List<List<Object>> readExcel() {
  2     try {
  3         // 创建输入流, 读取box.xls
  4         InputStream box = new FileInputStream(BOX_PATH);
  5         // 获取box.xls文件对象
  6         Workbook boxExcel = Workbook.getWorkbook(box);
  7         // 获取box.xls文件的指定工作表, 默认的第一个
  8         Sheet boxSheet = boxExcel.getSheet(0);
  9 
 10         // 定义一个集合存放box结果
 11         List<Map<String, String>> boxList = new ArrayList<>();
 12         // 读取每一行
 13         for (int i = 0; i < boxSheet.getRows(); i++) {
 14             // 存放每一行结果
 15             Map<String, String> boxCells = new HashMap<>();
 16             String key = "";
 17             String val = "";
 18             // 读取每一列
 19             for (int j = 0; j < boxSheet.getColumns(); j++) {
 20                 // box.xls文件的第I行第J列
 21                 Cell boxCell = boxSheet.getCell(j, i);
 22                 // 将boxNo作为value
 23                 if (j == 0) {
 24                     val = boxCell.getContents();
 25                 }
 26                 // 将boxName作为key
 27                 if (j == 1) {
 28                     key = boxCell.getContents();
 29                 }
 30             }
 31             boxCells.put(key, val);
 32             boxList.add(boxCells);
 33         }
 34         // 读取完box.xls后释放资源
 35         boxExcel.close();
 36 
 37         // 定义一个集合存放所有符合条件的结果
 38         List<List<Object>> lampList = new ArrayList<>();
 39 
 40         // 创建输入流, 读取lamp1.xls
 41         InputStream lamp_1 = new FileInputStream(LAMP_1_PATH);
 42         // 获取lamp1.xls文件对象
 43         Workbook lamp_1_Excel = Workbook.getWorkbook(lamp_1);
 44         // 获取lamp1.xls文件的指定工作表, 默认的第一个
 45         Sheet lamp_1_Sheet = lamp_1_Excel.getSheet(0);
 46 
 47         // 读取lamp.xls, 将所有的符合条件的结果存放到集合里面
 48         for (int i = 0; i < lamp_1_Sheet.getRows(); i++) {
 49             for (int j = 0; j < lamp_1_Sheet.getColumns(); j++) {
 50                 Cell lampCell = lamp_1_Sheet.getCell(j, i);
 51                 // 当前列是第3列时
 52                 if (j == 2) {
 53                     Integer num = Integer.valueOf(lampCell.getContents());
 54                     if (num >= 250) {
 55                         List<Object> lampCells = new ArrayList<>();
 56                         String lampNo = lamp_1_Sheet.getCell(0, i).getContents();
 57                         String boxName = lamp_1_Sheet.getCell(1, i).getContents();
 58                         String rawData = lamp_1_Sheet.getCell(2, i).getContents();
 59                         // 拿取box数据
 60                         for (Map<String, String> map : boxList) {
 61                             Set<String> keySet = map.keySet();
 62                             for (String key : keySet) {
 63                                 if (boxName.equals(key)) {
 64                                     String val = map.get(key);
 65                                     // boxNo
 66                                     lampCells.add(val);
 67                                     // boxName
 68                                     lampCells.add(key);
 69                                     // lampNo
 70                                     lampCells.add(lampNo);
 71                                     // 灯泡个数
 72                                     lampCells.add(1);
 73                                     // 总功率
 74                                     lampCells.add(num);
 75                                     // 原始数据
 76                                     lampCells.add(rawData);
 77                                 }
 78                             }
 79                         }
 80 
 81                         lampList.add(lampCells);
 82                     }
 83                 }
 84             }
 85         }
 86         // 读取完lamp.xls后释放资源
 87         lamp_1_Excel.close();
 88 
 89         // 创建输入流, 读取lamp1.xls
 90         InputStream lamp_2 = new FileInputStream(LAMP_2_PATH);
 91         // 获取lamp1.xls文件对象
 92         Workbook lamp_2_Excel = Workbook.getWorkbook(lamp_2);
 93         // 获取lamp1.xls文件的指定工作表, 默认的第一个
 94         Sheet lamp_2_Sheet = lamp_2_Excel.getSheet(0);
 95 
 96         // 读取lamp.xls, 将所有的符合条件的结果存放到集合里面
 97         for (int i = 0; i < lamp_2_Sheet.getRows(); i++) {
 98             for (int j = 0; j < lamp_2_Sheet.getColumns(); j++) {
 99                 Cell lampCell = lamp_2_Sheet.getCell(j, i);
100                 // 当前列是第3列时
101                 if (j == 2) {
102                     Integer num = 0;
103                     String contents = lampCell.getContents();
104                     String[] split = contents.split("-");
105                     for (String str : split) {
106                         Integer integer = Integer.valueOf(str);
107                         num += integer;
108                     }
109                     if (num >= 400) {
110                         List<Object> lampCells = new ArrayList<>();     // 存放每一行符合条件的结果
111                         String lampNo = lamp_2_Sheet.getCell(0, i).getContents();
112                         String boxName = lamp_2_Sheet.getCell(1, i).getContents();
113                         String rawData = lamp_2_Sheet.getCell(2, i).getContents();
114                         // 拿取box数据
115                         for (Map<String, String> map : boxList) {
116                             Set<String> keySet = map.keySet();
117                             for (String key : keySet) {
118                                 if (boxName.equals(key)) {
119                                     String val = map.get(key);
120                                     // boxNo
121                                     lampCells.add(val);
122                                     // boxName
123                                     lampCells.add(key);
124                                     // lampNo
125                                     lampCells.add(lampNo);
126                                     // 灯泡个数
127                                     lampCells.add(split.length);
128                                     // 总功率
129                                     lampCells.add(num);
130                                     // 原始数据
131                                     lampCells.add(rawData);
132                                 }
133                             }
134                         }
135                         lampList.add(lampCells);
136                     }
137                 }
138             }
139         }
140         // 读取完lamp.xls后释放资源
141         lamp_2_Excel.close();
142 
143         return lampList;
144     } catch (Exception e) {
145         throw new RuntimeException(e);
146     }
147 }

4.写出Excel

 1 public void writeExcel(List<List<Object>> arrayLists) {
 2     try {
 3         String[] title = {"序号", "rtuNo", "rtuName", "灯杆name", "盏数", "总功率", "原始数据", "计算时间"};
 4         // 新建立一个jxl文件
 5         OutputStream os = new FileOutputStream(FILE_PATH);
 6         // 创建Excel工作薄
 7         WritableWorkbook workbook = Workbook.createWorkbook(os);
 8         // 添加第一个工作表并设置第一个Sheet的名字
 9         WritableSheet sheet = workbook.createSheet("sheet", 0);
10         Label label;
11         for (int m = 0; m < title.length; m++) {
12             // Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z, 在Label对象的子对象中指明单元格的位置和内容
13             label = new Label(m, 0, title[m], getHeader());
14             // 将定义好的单元格添加到工作表中
15             sheet.addCell(label);
16         }
17         for (int i = 0; i < arrayLists.size(); i++) {
18             Number number = new Number(0, i + 1, i + 1);
19             sheet.addCell(number);
20             List list = arrayLists.get(i);
21             for (int j = 0; j < list.size(); j++) {
22                 label = new Label(j + 1, i + 1, String.valueOf(list.get(j)));
23                 sheet.addCell(label);
24             }
25             // 事件类型
26             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
27             String newdate = sdf.format(new Date());
28             label = new Label(7, i + 1, newdate);
29             sheet.addCell(label);
30         }
31         // 写入数据
32         workbook.write();
33         // 关闭文件
34         workbook.close();
35     } catch (Exception e) {
36         throw new RuntimeException(e);
37     }
38 }

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

...

  

原文地址:https://www.cnblogs.com/yanwu0527/p/8809345.html