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

excel-xssfx文件下载导出上下标代码,第1张

excel-xssfx文件下载导出上下标代码
excel列头样例: "test1" , "test2",

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

public RichTextString getRichTextHeader(String value){
		Matcher scriptMatcher = scriptPattern.matcher(value);
		String label,labelContent, labelName, temp = value;
		int start,end;
		List list = new ArrayList<>();
		Workbook workbook = new SXSSFWorkbook();
		while(scriptMatcher.find()){
			Font ft = workbook.createFont();
			label = scriptMatcher.group(0); //一组标签,如:a
			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("test1"));


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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5709079.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存