java poi框架导出excel如何插入特殊字符(复选框勾选)
背景:
google了好久java导出excel如何导出复选框勾选状态,没有找到可行的结果,实际操作了一下,要不就是导不出,要不就是导出之后不正确。
先看看要导出的excel格式吧
就是一个单元格中包含了中文和方框的符号,根据后台结果,如果是true,需要在方框内打勾。
正常手动在excel中插入复选框勾选是如何操作的
1.选择
2.找到Wingdings 2字体
就可以手动插入一个check的复选框了
poi框架导出如何设置
1.要注意每个字符其实就是一个Unicode编码,checkbox在代码中表示如下:\u0052
2.正常字体的\u0052编码对应的字符是R
3.修改单元格内字体,如果修改的过长,中文字符就会变乱码,如果修改的过短,就不能正常展示我们插入的特殊符号
4.我曾经尝试设置cell的font,但是发现会影响其它单元格的font,并且cell中包含的中文字符也会变成乱码,所以就放弃设置cell的font了
代码如下:
/**
* 该方法是处理checkbox的
*/
public RichTextString process(Cell cell, Object input, Font font) {
RichTextString richTextString;
// 设置字体名称
font.setFontName("Wingdings 2");
if (Objects.equals(input, true)) {
richTextString = new HSSFRichTextString("是\u0052 否\u25A1");
richTextString.applyFont(1, 2, font);
} else {
richTextString = new HSSFRichTextString("是\u25A1 否\u0052");
richTextString.applyFont(4, 5, font);
}
return richTextString;
}
// font是通过workbook创建出来的,是不能new的
Font font = workbook.createFont();
// 此处省略自己封装的框架,value值就是上面方法返回的RichTextString
cell.setCellValue((RichTextString) value);
导出结果如图:
最后:
至于纳税人识别号的方框内填数字,到现在也没好的方法来解决,手动插入还不会,更别提代码处理了,如果有人有更好的方案可以提出来,一起进步。