poi 5.2.2 操作word【目录】

poi 3.17操作Word工具包,点击此处

当前版本 5.2.2 ,版本不同,写法略有差异
- poi-5.2.2 操作word 【段落】
- poi-5.2.2 操作word 【表格】
- poi-5.2.2 操作word【单元格、行、列】
- poi 5.2.2 操作word【页眉页脚】
- poi 5.2.2 操作word【纸张、边距】
- poi-5.2.2 操作word【图片操作相关】
- poi 5.2.2 操作word【目录】


本文所需依赖

		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-full</artifactId>
            <version>5.2.2</version>
        </dependency>


- 添加目录样式,并获取

    /**
     * 设置目录(当前允许 三个级别的目录 )
     * 使用规则: 返回值 List<String> 为各级标题的样式值,以下标取用,如:设置一级标题,取集合index=0的值
     */
    public static List<String> addToc(XWPFDocument document){
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        XWPFParagraph catalogP = null;
        if(!paragraphs.isEmpty() && paragraphs.get(paragraphs.size() - 1).isPageBreak()){
            catalogP = paragraphs.get(paragraphs.size() - 1);
        }else{
            catalogP = document.createParagraph();
        }
        setStyle(catalogP.createRun() , "微软雅黑" , 16 ,true ,"目   录" ,"");
        catalogP.setAlignment(ParagraphAlignment.CENTER);

        XWPFParagraph paragraph = document.createParagraph();
        CTSimpleField ctSimpleField = paragraph.getCTP().addNewFldSimple();
        ctSimpleField.setInstr("TOC \\o \"1-4\" \\h \\z \\u");
        ctSimpleField.setDirty(true);
        ctSimpleField.addNewR().addNewT().setStringValue("<<请");
        CTR ctr = ctSimpleField.addNewR();
        ctr.addNewT().setStringValue("右击");
        ctr.addNewRPr().addNewColor().setVal("FF0000");

        ctSimpleField.addNewR().addNewT().setStringValue("该文本,在弹出框中选择【");

        CTR ctr2 = ctSimpleField.addNewR();
        ctr2.addNewT().setStringValue("更新域");
        ctr2.addNewRPr().addNewColor().setVal("FF0000");

        ctSimpleField.addNewR().addNewT().setStringValue("】 ,方可为您生成目录>>");

        String head1 = "1";                 //一级标题
        String head2 = "2";                 //二级标题
        String head3 = "3";                 //三级标题
        addCustomHeadingStyle(document , head1 , 1);
        addCustomHeadingStyle(document , head2 , 2);
        addCustomHeadingStyle(document , head3 , 3);

        List<String> tocHeades = new ArrayList<>();
        tocHeades.add(head1);
        tocHeades.add(head2);
        tocHeades.add(head3);
        setPageBreak(document);
        return tocHeades;
    }

    /**
     * 增加自定义标题样式。这里用的是stackoverflow的源码
     * @param docxDocument 目标文档
     * @param strStyleId 样式名称
     * @param headingLevel 样式级别
     */
    private static void addCustomHeadingStyle(XWPFDocument docxDocument, String strStyleId, int headingLevel) {

        CTStyle ctStyle = CTStyle.Factory.newInstance();
        ctStyle.setStyleId(strStyleId);

        CTString styleName = CTString.Factory.newInstance();
        styleName.setVal(strStyleId);
        ctStyle.setName(styleName);

        CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();
        indentNumber.setVal(BigInteger.valueOf(headingLevel));

        // lower number > style is more prominent in the formats bar
        ctStyle.setUiPriority(indentNumber);

        CTOnOff onoffnull = CTOnOff.Factory.newInstance();
        ctStyle.setUnhideWhenUsed(onoffnull);

        // style shows up in the formats bar
        ctStyle.setQFormat(onoffnull);

        // style defines a heading of the given level
        CTPPrGeneral ctpPrGeneral = CTPPrGeneral.Factory.newInstance();
        ctpPrGeneral.setOutlineLvl(indentNumber);
        ctStyle.setPPr(ctpPrGeneral);

        XWPFStyle style = new XWPFStyle(ctStyle);

        // is a null op if already defined
        XWPFStyles styles = docxDocument.createStyles();

        style.setType(STStyleType.PARAGRAPH);
        styles.addStyle(style);

    }

- 给段落设置目录样式

    /**
     * 设置段落标题样式,用来生成目录
     * @param headStyle 即通过 addToc 方法获取到的目录样式集合中的一个
     */
    public static void setParagraphStyle(XWPFParagraph paragraph , String headStyle){
        paragraph.setStyle(headStyle);
    }

- 使用方法

使用 addDoc() 方法获取目录样式 集合List
使用 setParagraphStyle() 方法给某个段落设置目录样式
目录所在位置受当前 Document 上下文影响,设置完成后需手动更新目录域

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Poi是一个Java的处理Office文档的开源框架,其中包括了对Excel文档的支持。CTChart是Poi中用于处理Excel中图表的类,下面是操作CTChart的详细教程: 1. 创建Excel文档 首先需要创建一个Excel文档,可以使用Poi中的Workbook类来创建,具体代码如下: ``` Workbook workbook = new XSSFWorkbook(); ``` 2. 创建Sheet并填充数据 接着需要在Excel文档中创建一个Sheet,并填充数据,具体代码如下: ``` Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("数据1"); row.createCell(1).setCellValue("数据2"); row.createCell(2).setCellValue("数据3"); ``` 3. 创建CTChart对象 创建CTChart对象需要使用Poi中的工具类ChartFactory,需要传入图表类型和数据源,具体代码如下: ``` CTChart chart = ChartFactory.createBarChart( null, // 图表标题,可以为null "X轴", // X轴标题 "Y轴", // Y轴标题 sheet, // 数据源 new CellRangeAddress(0, 0, 0, 2), // 数据区域 null // 是否显示图例,可以为null ); ``` 4. 设置图表样式 可以设置图表样式,比如设置图表的宽度和高度,具体代码如下: ``` chart.getPlotArea().getBarChartArray(0).getSerArray(0).addNewSpPr().addNewXfrm().addNewOff().setX(0); chart.getPlotArea().getBarChartArray(0).getSerArray(0).addNewSpPr().addNewXfrm().addNewOff().setY(0); chart.getPlotArea().getBarChartArray(0).getSerArray(0).addNewSpPr().addNewXfrm().addNewExt().setCx(100000); chart.getPlotArea().getBarChartArray(0).getSerArray(0).addNewSpPr().addNewXfrm().addNewExt().setCy(100000); ``` 5. 将图表添加到Sheet中 将图表添加到Sheet中需要使用Poi中的Drawing类,具体代码如下: ``` Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 0, 13, 20); drawing.createChart(anchor, chart); ``` 6. 保存Excel文档 最后需要将Excel文档保存到磁盘中,具体代码如下: ``` FileOutputStream fos = new FileOutputStream("output.xlsx"); workbook.write(fos); fos.close(); ``` 以上就是使用Poi操作CTChart的详细教程。需要注意的是,不同的图表类型有不同的创建方法,需要根据实际情况进行选择。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值