无关风月
2024-12-09 2053b8fe0e98d4b4449bc756a93ced78f42277c4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.jilongda.manage;
 
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.aspectj.lang.annotation.Before;
import org.junit.jupiter.api.Test;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
 
/**
 * @author xuanjinnan
 * @date 2022/12/9 10:32
 */
public class MyComplexTemplateTest {
    List<Traffic> traffics = new ArrayList<>();
 
    @Test
    public void myNestedLoopTest() throws IOException {
 
        Traffic traffic1 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(4).atZone(ZoneId.systemDefault()).toInstant())
                , new ArrayList<>(Arrays.asList(new TrafficDetail(1,3),new TrafficDetail(2,4),new TrafficDetail(3,4)))
                , new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 5))));
        Traffic traffic2 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(3).atZone(ZoneId.systemDefault()).toInstant())
                , new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 3)))
                , new ArrayList<>(Arrays.asList(new TrafficDetail(1,5),new TrafficDetail(2,6),new TrafficDetail(3,7))));
        Traffic traffic3 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(2).atZone(ZoneId.systemDefault()).toInstant())
                , new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 3)))
                , new ArrayList<>(Collections.singletonList(new TrafficDetail())));
        Traffic traffic4 = new Traffic("小明", Date.from(LocalDateTime.now().minusDays(1).atZone(ZoneId.systemDefault()).toInstant())
                , new ArrayList<>(Collections.singletonList(new TrafficDetail()))
                , new ArrayList<>(Collections.singletonList(new TrafficDetail(1, 5))));
        traffics.add(traffic1);
        traffics.add(traffic2);
        traffics.add(traffic3);
        traffics.add(traffic4);
        //设置 id
        AtomicInteger id = new AtomicInteger(1);
        traffics.forEach(traffic -> traffic.setId(id.getAndIncrement()));
 
        TemplateExportParams params = new TemplateExportParams(
                "template/销售数据列表.xls");
//        params.setColForEach(true);
        Map<String,Object> value = new HashMap<>();
        value.put("list",traffics);
 
        Workbook book = ExcelExportUtil.exportExcel(params, value);
        // (1)处理付款明细数据不显示;
        // (2)处理合并单元格边框实线
        // (3)处理共享单车和地铁没有边框实线
        myRest(book);
        FileOutputStream fos = new FileOutputStream("F:/workSpace/JiLongDa/manage/src/main/resources/template/销售数据列表.xls");
        book.write(fos);
        fos.close();
    }
 
    private void myRest(Workbook book) {
        Sheet firstSheet = book.getSheetAt(0);
        List<CellRangeAddress> mergedRegions = firstSheet.getMergedRegions();
        List<Integer> removeMergedRegionIndexList = new ArrayList<>();
 
        // (1)处理付款明细数据不显示;
        for (int i = 0; i < mergedRegions.size(); i++) {
            CellRangeAddress mergedRegion = mergedRegions.get(i);
            int firstColumn = mergedRegion.getFirstColumn();
            int lastColumn = mergedRegion.getLastColumn();
            int firstRow = mergedRegion.getFirstRow();
            if(firstRow >= 2 && firstColumn >= 3 && lastColumn <= 5){
                removeMergedRegionIndexList.add(i);
            }
        }
        firstSheet.removeMergedRegions(removeMergedRegionIndexList);
        // (2)处理合并单元格边框实线
//        for (CellRangeAddress mergedRegion : mergedRegions) {
//            RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegion, firstSheet);
//            RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegion, firstSheet);
//            RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegion, firstSheet);
//            RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegion, firstSheet);
//        }
        // (3)处理共享单车和地铁没有边框实线;略,自行处理
    }
 
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Traffic{
        public Traffic(String name, Date date, List<TrafficDetail> shareBikes, List<TrafficDetail> subways) {
            this.name = name;
            this.date = date;
            this.shareBikes = shareBikes;
            this.subways = subways;
        }
 
        private Integer id;
        private String name;
        private Date date;
        private List<TrafficDetail> shareBikes;
        private List<TrafficDetail> subways;
    }
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class TrafficDetail{
        private Integer number;
        private Integer cost;
 
    }
 
}