导出 excel 部分字符串变成红色
我这边是将<span></span>包起来的字符串变成红色;
导包
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
代码
// 全局变量
private final static String SPAN_BEGIN = "<span>";
private final static String SPAN_END= "</span>";
// ====== 业务代码 ======
try (Workbook wb = new XSSFWorkbook();){
// 创建页
XSSFSheet sheet = (XSSFSheet) wb.createSheet("页标题");
// 默认的字体
XSSFFont font = (XSSFFont) wb.createFont();
// 变红的字体
XSSFFont font2 = (XSSFFont) wb.createFont();
font2.setColor(Font.COLOR_RED);
// 包含 标签的字符串 将字符串中的 </sapn><span> 去掉
String checkResultHtml = "123<sapn>456</span><span>78</span>90".replaceAll(SPAN_END + SPAN_BEGIN, "");
// 没有标签的字符串,就是 checkResultHtml 去掉<span>和</span>之后的字符串
String checkResultTxt = "1234567890";
XSSFRichTextString text = new XSSFRichTextString(checkResultTxt);
do {
// 获取第一个开始标签 <span> 的索引
int start = checkResultHtml.indexOf(SPAN_BEGIN);
// 去掉第一个开始标签 <span> 方便下一次索引取值
checkResultHtml = checkResultHtml.replaceFirst(SPAN_BEGIN, "");
// 获取第一个结束标签 </span> 的索引
int end = checkResultHtml.indexOf(SPAN_END);
// 去掉第一个结束标签 </span> 方便下一次索引取值
checkResultHtml = checkResultHtml.replaceFirst(SPAN_END, "");
// if(start != 0) {
// text.applyFont(0,start,font);
// }
// 将索引内的字符串标红
text.applyFont(start, end, font2);
// 剩下的字符串变回原本的样式 不设置的话 后面的值也会变成红色的;我也不知道为啥
text.applyFont(end, checkResultTxt.length(), font);
}while (checkResultHtml.contains(SPAN_BEGIN));
// 创建行
Row dataRow = sheet.createRow(0);
// 创建单元格,并赋值
dataRow.createCell(0).setCellValue(text);
} catch (IOException e) {
}
参考博客