如何使用最新的apache poi设置加粗字体?

时间:2018-03-13 10:00:34

标签: apache-poi

我使用了最新的apache poi

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>

但我无法设置加粗字体,下面的代码不起作用

font.setBold(true);

因为默认是真的

set a boolean value for the boldness to use. If omitted, the default value is true.

并且不存在setBoldWeight方法

那么如何在最新的apache poi中设置大胆的重量?

XSSFWorkbook wb = new XSSFWorkbook()
XSSFSheet sheet = wb.createSheet();
XSSFCell cell = sheet.createRow(0).createCell(0);
cell.setCellValue("hello world");

XSSFCellStyle cellStyle = wb.createCellStyle();
XSSFFont font = wb.createFont();
font.setBold(true);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);

try (FileOutputStream fos = new FileOutputStream("bold_test.xls")) {
    wb.write(fos);
}

效果

enter image description here

和大胆的效果应该是这样的

enter image description here

2 个答案:

答案 0 :(得分:0)

实际上它是Mac Numbers错误

答案 1 :(得分:0)

Mac Numbers无法正确解释<b val="true"/>。但这违反了规范。请参阅xmlschema-2 boolean:“定义为·boolean的数据类型的实例可以包含以下法律文字{true,false,1,0}。”。

但它会正确解释<b />。这也可以将Font标记为粗体。这也意味着“如果省略,则默认值为true。”。如果b标记在那里但没有值,truefalse,则默认为true。要设置非粗体,必须删除b标记,或者必须设置<b val="false"/><b val="0"/>apache poi做得最好,最兼容。它会删除b标记。

同样适用于i talic和s trikeout。

apache poi开发人员团队的提示:考虑设置<b /><i /><s />而不设置值true。这将是最兼容的。

尝试:

import java.io.FileOutputStream;

import org.apache.poi.xssf.usermodel.*;

public class CreateExcelFontBold {

 public static void main(String[] args) throws Exception {

  XSSFWorkbook wb = new XSSFWorkbook();
  XSSFSheet sheet = wb.createSheet();
  XSSFCell cell = sheet.createRow(0).createCell(0);
  cell.setCellValue("hello world");

  XSSFCellStyle cellStyle = wb.createCellStyle();
  XSSFFont font = wb.createFont();
  //font.setBold(true); // <b val="true"/> does not work using Mac Numbers
  font.getCTFont().addNewB(); // maybe <b /> will work?
  cellStyle.setFont(font);
  cell.setCellStyle(cellStyle);

  try (FileOutputStream fos = new FileOutputStream("bold_test.xlsx")) {
   wb.write(fos);
  }

 }

}