【Java】Java POI 设置Excel单元格上下标

这篇博客介绍了如何在Java中为Excel表格的特定单元格添加上下标。作者提供了一段核心代码,通过创建`RichTextString`对象,设置`Font`的`TypeOffset`属性为`HSSFFont.SS_SUPER`来实现上标效果。代码示例展示了如何创建标题和内容,并应用样式到单元格中,确保内容自适应宽度。最终,博主分享了一个生成带有上下标的Excel文件的完整方法。
摘要由CSDN通过智能技术生成
背景

由于最近楼主做的是新冠检测相关的系统,其中有涉及导出Excel的需求。按平时封装的导出工具类基本也就满足了,但是最近来了一个要求某些列要有上下标,所以给大家贴出上下标的关键代码,以后抄作业的时候可以快速找到,不要在这个问题上浪费太多时间。

代码时间
public static void main(String[] args) throws IOException, IOException {

        //创建标题
        List<TableHeader> tableHeaderList = new ArrayList<>();
        {
            TableHeader tableHeader = new TableHeader();
            tableHeader.setName("学习上标");
            tableHeader.setKey("studySuper");
            tableHeaderList.add(tableHeader);
        }
        //创建内容
        List<TableFooter> footerList = new ArrayList<>();
        {
            TableFooter footer = new TableFooter();
            Map<String, Object> data = new LinkedHashMap<>();
            data.put("studySuper", "-α3.7/αα");
            footer.setData(data);
            //======todo 重点代码 start=============
            AbstractCellStyleHolder dataCellStyleHolder = (sheet, cell) -> {
                if (cell.getCellType() == CellType.STRING) {
                    //todo 核心代码  真正上下标起作用的
                    RichTextString richTextString = new HSSFRichTextString(cell.getStringCellValue());
                    Font font = sheet.getWorkbook().createFont();
                    font.setTypeOffset(HSSFFont.SS_SUPER);
                    richTextString.applyFont(2,5,font);
                    cell.setCellValue(richTextString);
                }
                //自适应内容宽度
                sheet.setColumnWidth(cell.getColumnIndex(),(cell.toString().getBytes().length+4) * 256);
            };
            //=======todo 重点代码 end===============
            footer.setStyleHolder(dataCellStyleHolder);
            footerList.add(footer);
        }
        //输出
        Workbook workbook = ExcelGenerateUtil.excelGenerate("测试上下标", tableHeaderList, footerList);
        String randomStr = RandomStringUtils.randomNumeric(3);
        System.out.println(randomStr);
        workbook.write(new FileOutputStream("c:/test/up"+ randomStr +".xls"));
    }

这是楼主自己封装的excel生成的工具类,其余部分不用去看,就是为了造个标题,造个内容。最最核心的起到上下标的代码如下:

//todo 核心代码  真正上下标起作用的
RichTextString richTextString = new HSSFRichTextString(cell.getStringCellValue());
Font font = sheet.getWorkbook().createFont();
font.setTypeOffset(HSSFFont.SS_SUPER);
richTextString.applyFont(2,5,font);
cell.setCellValue(richTextString);

要创建一个RichTextString 类,实现子类用HSSFRichTextString,其他子类也试过,好像有点效果不太好,其他不需要上标的字体也会受点影响,所以没进行使用。

首先先创建一个字体类Font

Font font = sheet.getWorkbook().createFont();

其次,设置类型偏移setTypeOffset方法

//上移:HSSFFont.SS_SUPER  下移:HSSFFont.SS_SUB
font.setTypeOffset(HSSFFont.SS_SUPER);

最后应用到richTextString

richTextString.applyFont(2,5,font);
applyFont(int startIndex,int endIndex,Font font);
  • startIndex:目标内容从什么位置开始进行上下标
  • endIndex:目标内容从什么位置结束上下标(跟subString方法有点类似,这个endIndex是包前不包后)
  • font: 就是你辛辛苦苦设置的上面的创建出来要上标还是下标的Font对象

这样就可以正常实现上下标了,以上代码效果图如下。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰肥啊

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值