【问题标题】:Apache POI set cell Font and font colorApache POI 设置单元格字体和字体颜色
【发布时间】:2012-05-24 17:34:21
【问题描述】:

我正在使用 Apache POI 的 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;
        }
    }

【问题讨论】:

    标签: java apache-poi


    【解决方案1】:

    您的new_font 似乎是一个全局变量,您不断更改它,然后将其注入到单元格中。它应该是 setFontOneCell() 本地的,以便每个单元格都有自己的 Font 实例,而不是所有单元格实际上都使用同一个对象,

    【讨论】:

    • 谢谢 Kilian Foth 现在它可以工作了,但是我如何在应用样式后销毁该对象,因为它会出现堆空间错误。
    • 您需要保留该对象,直到您正在构建的电子表格已安全地写入磁盘。简单的解决方案是使用命令行开关 -Xmx 增加运行时堆内存大小。如果你真的想在你的程序中节省内存,你可以创建一个 Font 对象的 cache 以便你重用实例,只要它们都用于相同的字体,并创建一个新对象仅当您需要以前没有出现过的新字体时。
    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2011-11-10
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多