xkrs_ms/ruoyi-common
ggg444 cce92983fd 优化Excel导出计算sheet数目的方式
1. 导出数据的总条数刚好等于sheet最大行数时,会多产生一个空白sheet
测试代码如下:
    public static void main(String[] args) {
        System.out.println("无数据时,1页:" + getTotalPage(sheetSize * 0));
        System.out.println("刚好1页:" + getTotalPage(sheetSize * 1));
        System.out.println("刚好7页:" + getTotalPage(sheetSize * 7));
        System.out.println("1页:" + getTotalPage(200));
        System.out.println("2页:" + getTotalPage(sheetSize * 1 + 200));
        System.out.println("8页:" + getTotalPage(sheetSize * 7 + 200));
        System.out.println("=========");
        System.out.println("无数据时,1页:" + getTotalPage2(sheetSize * 0));
        System.out.println("刚好1页:" + getTotalPage2(sheetSize * 1));
        System.out.println("刚好7页:" + getTotalPage2(sheetSize * 7));
        System.out.println("1页:" + getTotalPage2(200));
        System.out.println("2页:" + getTotalPage2(sheetSize * 1 + 200));
        System.out.println("8页:" + getTotalPage2(sheetSize * 7 + 200));
    }

    private static double getTotalPage(int size) {
        //原方法。
        //ceil方法中是两个int做除法,结果还是int。ceil实际上没有起到作用。
        return Math.ceil(size / sheetSize);
    }

    private static int getTotalPage2(int size) {
        //修改后的方法。
        //size * 1.0 使int转为double,做除法后还是double。max(1, ...)是为了在size为0时,始终能生成一个sheet。
        //需要修改for循环的判断条件
        return Math.max(1, (int)Math.ceil(size * 1.0 / sheetSize));
    }
测试结果:
    //预期结果:0,0,6,0,1,7
    无数据时,1页:0.0
    刚好1页:1.0
    刚好7页:7.0
    1页:0.0
    2页:1.0
    8页:7.0
    =========
    //预期结果:1,1,7,1,2,8
    无数据时,1页:1
    刚好1页:1
    刚好7页:7
    1页:1
    2页:2
    8页:8

2. 有疑问的地方(本次提交没有做修改):
    1105行 index是从0开始的,即sheet的后缀名也是从0开始的。如果要使后缀名从1开始,可以考虑 (index + 1)
2021-09-15 08:27:45 +00:00
..
2021-09-13 09:36:38 +08:00