Я использовал последнюю версию 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

1
zhuguowei 13 Мар 2018 в 13:00

2 ответа

Лучший ответ

Номера Mac неправильно интерпретируют <b val="true"/>. Но это нарушает спецификацию. См. xmlschema-2 boolean: "Экземпляр определенного типа данных as · boolean · может иметь следующие допустимые литералы {true, false, 1, 0}. ".

Но он правильно интерпретирует <b />. Это также действительно для пометки Font жирным шрифтом. И это также означает «Если опущено, значение по умолчанию - истина». Если тег b присутствует, но не имеет значения, ни true, ни false, то по умолчанию используется true. Чтобы не выделять жирным шрифтом, необходимо удалить тег b или установить <b val="false"/> или <b val="0"/>. Там apache poi делает все возможное, наиболее совместимое. Удаляет тег b.

То же самое для талика i и трицикла s.

Совет для команды разработчиков 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);
  }

 }

}
1
Axel Richter 14 Мар 2018 в 07:27

На самом деле это ошибка номеров Mac

0
zhuguowei 14 Мар 2018 в 02:30