zoukankan      html  css  js  c++  java
  • 关于使用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

    ...

      

  • 相关阅读:
    MyBatis3: There is no getter for property named 'code' in 'class java.lang.String'
    jQuery获取Select选择的Text和 Value(转)
    mybatis3 :insert返回插入的主键(selectKey)
    【转】Mybatis/Ibatis,数据库操作的返回值
    Android问题-打开DelphiXE8与DelphiXE10编译空工程提示“[Exec Error] The command exited with code 1.”
    Android问题-打开DelphiXE8与DelphiXE10新建一个空工程提示"out of memory"
    BAT-使用BAT生成快捷方式
    给 TTreeView 添加复选框
    跨进程发送消息数据
    鼠标拖动虚影效果
  • 原文地址:https://www.cnblogs.com/yanwu0527/p/8809345.html
Copyright © 2011-2022 走看看