excel-xssfx文件下载导出上下标代码

excel列头样例: "test<sub>1</sub>" , "test<sup>2</sup>",

//详细代码
private static final Pattern scriptPattern = Pattern.compile("<(su[b|p])>([^<>]+)</\\1>");

public RichTextString getRichTextHeader(String value){
		Matcher scriptMatcher = scriptPattern.matcher(value);
		String label,labelContent, labelName, temp = value;
		int start,end;
		List<SubSupFont> list = new ArrayList<>();
		Workbook workbook = new SXSSFWorkbook();
		while(scriptMatcher.find()){
			Font ft = workbook.createFont();
			label = scriptMatcher.group(0); //一组标签,如:<sub>a</sub>
			labelName = scriptMatcher.group(1); // 标签名字,如:sub/sup
			labelContent = scriptMatcher.group(2); // 标签之间的内容,如:a
			start = temp.indexOf(label);//这个标签的起始位置
			end = start + labelContent.length(); //这个标签的内容长度
			temp = temp.replace(label, labelContent); // 替换一组标签为标签之间的内容
			if(StringUtils.isEmpty(temp)){
				continue;
			}
			if("sub".equalsIgnoreCase(labelName)){
				ft.setTypeOffset(HSSFFont.SS_SUB); //下标
			}else{
				ft.setTypeOffset(HSSFFont.SS_SUPER); //上标
			}
			list.add(new ScriptFont(start,end,ft));
		}
		RichTextString richTextString;
		if(list.size() > 0){
			richTextString = new XSSFRichTextString(temp);
			for(ScriptFont scriptFont: list){
				richTextString.applyFont(scriptFont.getStart(),scriptFont.getEnd(),scriptFont.getFt());
			}
		}else{
			richTextString = new XSSFRichTextString(value);
		}
		return richTextString;
	}

//然后把上面的设置给cell的value,如下所示:
cell.setCellValue(getRichTextHeader("test<sub>1</sub>"));


//ScriptFont类如下:
@Data
@AllArgsConstructor
public class ScriptFont{
	public int start;
	public int end;
	public Font ft;
}

以上代码支持XSSFWorkbook, 而SXSSFWorkbook大数据量下载的不支持,因为流格式数据不是放在共享内存里面的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值