如何设置Excel页脚字体样式以兼容Excel2016及更高版本
问题原因
Excel 2016对页眉页脚的格式标记语法校验非常严格,Apache POI提供的HeaderFooter.font()方法生成的字体标记不符合旧版Excel的语法规范,所以会被识别为无效内容,触发修复后直接删除。
可行解决方案
仅需设置字号的最简方案
你当前使用的Excel原生字号标记&<字号>是兼容性最好的写法,所有Excel版本都可以正常识别,不需要依赖POI的封装方法,比如&8就代表8号字,完全满足仅设置字号的需求。同时设置字体名称+字号的兼容方案
如果必须指定字体,直接使用Excel原生的字体格式标记,不要用POI的HeaderFooter.font()封装方法,标记语法为&"字体名称,字形",和字号标记拼接即可,Java代码示例如下:
final Footer footer = getSheet().getFooter(); final StringBuilder strFooterText = new StringBuilder(); strFooterText.append(DETAILS_FOOTER.get(0)); strFooterText.append("\n"); strFooterText.append(DETAILS_FOOTER.get(1)); strFooterText.append(getDetails()); // 微软雅黑常规+8号字,注意Java字符串内双引号需要转义 String footerStyle = "&\"微软雅黑,Regular\"&8"; footer.setLeft(footerStyle + strFooterText.toString()); footer.setRight("Page " + HeaderFooter.page() + " of " + HeaderFooter.numPages());
注意:需要确保指定的字体是Excel 2016默认预装的字体,不要使用自定义字体,否则Excel会自动替换样式。
注意事项
不要在样式标记和文本内容之间添加多余空格,也不要给同一页脚区域重复设置多组样式标记,否则会触发Excel的格式校验错误。
内容的提问来源于stack exchange,提问作者LeO
相关产品推荐
相关产品推荐

