栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java导出复杂打印格式的Excel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java导出复杂打印格式的Excel

要做成:3-10行是填入的数据

打印区域为:

划分的小单元是一盒的数据,也就是8行为一个单元来填入数据,这个看你具体的业务。更常见的是以一行为单位。

使用工具:某大佬的插件,稍微改动了一下打印部分的设置
ExcelTemplate插件代码https://gitee.com/jiangyongbing24/poi/blob/master/src/export/ExcelTemplate.java
博客原文
https://blog.csdn.net/jiangyongbing008/article/details/100795250
下载下来建一个工具类就行了

excel 模板
2-11行是我要循环的单元,代码中是用下标所以是1-10

测试代码:

  public static void hahah(){
        File file;
        FileOutputStream fop = null;
        try {
            ExcelTemplate excel = new ExcelTemplate("D:\excel3.xlsx");
            if(!excel.examine())
                return;
            linkedHashMap> rows = new linkedHashMap<>();
            // 创建第一个行区域里面填充的值,ExcelTemplate会按从左至右,
            // 从上往下的顺序,挨个填充区域里面的${},所以创建的时候注意顺序就好
            linkedList row1 = new linkedList<>();

            // 把第一个行区域row1添加进入rows
            for(int i =1;i<=8;i++){
                row1.add(i+"");
                row1.add("当好档号");
                row1.add("文号文号");
                row1.add("责任者责任者");
                row1.add("题名题名题名");
                row1.add("20190910");
                row1.add("页数");
                row1.add("全宗号");
                row1.add("代码");
                row1.add("年度");
                if(i==8){
                    row1.add("第 209 盒");
                }
            }
            rows.put(1,row1);
            rows.put(2,row1);
            rows.put(3,row1);
            rows.put(4,row1); //设置放进去4个单元,就是4盒的数据
            // 第一个参数,需要操作的sheet的索引
	        // 第二个参数,需要复制的区域的第一行索引
	        // 第三个参数,需要复制的区域的最后一行索引
	        // 第四个参数,需要插入的位置的索引
	        // 第五个参数,填充行区域中${}的值
	        // 第六个参数,是否需要删除原来的区域
	        // 需要注意的是,行的索引一般要减一
            excel.addRowByExist(0,1,10,1,rows,true);
//          Workbook workbook = excel.getWorkbook();
            file = new File("D:/newfile.xlsx");
            excel.save(file.getPath());//他封装了保存的接口,不需要自己处理了
//            fop = new FileOutputStream(file);
//            byte[] contentInBytes = excel.getBytes();
//            fop.write(contentInBytes);
//            fop.flush();
//            fop.close();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (fop != null) {
                    fop.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
打印区域

打印的时候要设置边距,以及“归档文件目录”需要在打印的每页都显示,但是实际报表上只显示一次,如果手动操作的话是在“页面布局”,“”打印标题“”下设置,填入 $1:$1 ,第一行第一列作为打印标题

稍微改动代码,在ExcelTemplate.java中,initsheet方法里面,加入对打印的设置
发现这个单位有问题,我设置1,那么被设置为了2.5,所以单位尺就除以了2.5

        {//
            sheet.setRepeatingRows(new CellRangeAddress(0,0,0,0));
            //设置每页都有的打印标题,对应图中的$1:$1
            sheet.setMargin(HSSFSheet.BottomMargin,((double)6/(double)25));// 页边距(下)
            sheet.setMargin(HSSFSheet.TopMargin,( double ) 19/(double) 25 );// 页边距(左)
            sheet.setMargin(HSSFSheet.RightMargin,( double ) 1/(double) 2.5 );// 页边距(右)
            sheet.setMargin(HSSFSheet.LeftMargin,( double ) 1 /(double) 2.5);// 页边距(上)
            sheet.getPrintSetup().setLandscape(true); //纸张方向水平
            sheet.getPrintSetup().setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置A4
        }

开源的大佬们yyds!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346218.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号