Java ApachePOI设置单元格字体和字体颜色

Java ApachePOI设置单元格字体和字体颜色,java,apache-poi,Java,Apache Poi,我正在使用ApachePOI的XSSF读取一个xlsx文件。当读取特定单元格的字体并应用于新单元格时,该字体将应用于整个工作表,而不是特定单元格。我想举个例子: column1 column2 column3 row1 ARIAL TIMES ROMAN ARIAL row2 TIMES ROMAN ARIAL ARIAL row3 ARIAL ARIAL ARIAL 我希望每个单元格中的字体与原始文件中的相同

我正在使用ApachePOI的XSSF读取一个
xlsx
文件。当读取特定单元格的字体并应用于新单元格时,该字体将应用于整个工作表,而不是特定单元格。我想举个例子:

        column1 column2      column3 
row1    ARIAL   TIMES ROMAN  ARIAL

row2    TIMES ROMAN ARIAL   ARIAL   

row3     ARIAL   ARIAL   ARIAL   
我希望每个单元格中的字体与原始文件中的相同

我的代码是:

public XSSFCellStyle setFontOnCell(XSSFCellStyle cellStyle, XSSFCell cell)
    {
        try {
            font = cell.getCellStyle().getFont();
            new_font.setFontName(font.getFontName());
            new_font.setBoldweight(font.getBoldweight());
            new_font.setFontHeight((short)font.getFontHeight());
            new_font.setFamily(font.getFamily());
            cellStyle.setFont(new_font);
            return cellStyle;
        } catch (Exception e) {
            //System.out.println(e.getMessage());
            return cellStyle;
        }
    }

您的
new\u font
似乎是一个全局变量,您不断更改它,然后将其注入单元格。它应该是本地的
setFontOneCell()
,这样每个单元格都有自己的
Font
实例,而不是所有单元格都使用同一个对象,

您的
新字体
似乎是一个全局变量,您不断更改它,然后将其注入单元格。它应该是本地的
setFontOneCell()
,这样每个单元格都有自己的
Font
实例,而不是所有单元格都使用相同的对象,

谢谢Kilian Foth,它现在可以工作了,但是在应用style之后,我如何销毁该对象,因为它的获取堆空间错误。您需要保留该对象,直到您正在构建的电子表格安全写入磁盘。简单的解决方案是使用命令行开关-Xmx增加运行时堆内存大小。如果你真的想在程序中节省内存,你可以创建一个
Font
对象的缓存,这样你就可以重用实例,只要它们都用于相同的字体,只有当你需要一种以前没有出现过的新字体时,才创建一个新对象。谢谢Kilian Foth,现在它可以工作了,但是在应用样式后,由于它的堆空间错误,我如何才能销毁该对象。你需要保留该对象,直到你正在构建的电子表格安全地写入磁盘。简单的解决方案是使用命令行开关-Xmx增加运行时堆内存大小。如果你真的想在程序中节省内存,你可以创建一个
Font
对象的缓存,这样你就可以重用实例,只要它们都是相同的字体,并且只在你需要一个以前没有出现过的新字体时才创建一个新对象。