Почему форматирование текста в Apache POI работает не с XSSF, а с HSSF?

1

Я хочу создать книгу с некоторой разметкой с помощью Apache POI.

Я попытался сделать это с помощью более современных пакетов XSSF, но в итоге они не работали даже в самых простых целях, таких как изменение цвета.

Я даю вам свой тестовый класс, чтобы попробовать его самостоятельно (просто измените вызов xssf на hssf в основном методе).

import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

import com.cisamag.projects.basiclibrary.logical.file.FileHelper;

public class Test {

private static File path = new File("pathtofile");

    public static void main(String[] args) throws IOException{
        xssf();
    }


    public static void xssf() throws IOException {
        File f = new File(path);
        if(f.exists()){
            f.delete();
        }
        f.createNewFile();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet();
        XSSFCell c = sheet.createRow(1).createCell(1);
        XSSFCellStyle cellStyle = c.getCellStyle();

        Font font = workbook.createFont();
        font.setItalic(true);
        font.setColor(Font.COLOR_RED);
        cellStyle.setFont(font);
        c.setCellStyle(cellStyle);
        c.setCellValue("HELLO");

        workbook.write(new FileOutputStream(f));
        Desktop.getDesktop().open(f);
    }

    public static void hssf() throws IOException {
        File f = new File(path);
        if(f.exists()){
            f.delete();
        }
        f.createNewFile();

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();
        HSSFCell c = sheet.createRow(1).createCell(1);
        HSSFCellStyle cellStyle = c.getCellStyle();

        Font font = workbook.createFont();
        font.setItalic(true);
        font.setColor(new HSSFColor.RED().getIndex());
        cellStyle.setFont(font);
        c.setCellStyle(cellStyle);
        c.setCellValue("HELLO");

        workbook.write(new FileOutputStream(f));
        Desktop.getDesktop().open(f);
    }
}
  • 1
    Если я правильно помню, XSSF может иметь дополнительные зависимости ... Любая трассировка стека?
Теги:
apache-poi

1 ответ

4

Сначала необходимо создать CellStyle - в вашем примере c.getCellStyle() возвращает значение по умолчанию CellStyle (согласно api docs), которое, по-видимому, не может быть изменено.

Итак, замените

    XSSFCellStyle cellStyle = c.getCellStyle();

в вашем примере с

    XSSFCellStyle cellStyle = workbook.createCellStyle();

и он должен работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню