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大数据量下载的不支持,因为流格式数据不是放在共享内存里面的
excel-xssfx文件下载导出上下标代码
最新推荐文章于 2022-03-02 18:28:01 发布