首页 > 解决方案 > Apache POI 错误的单元格字体设置

问题描述

我在使用 Apache POI 时遇到问题,当我将字体设置为样式,然后将该样式设置为单元格时,它会正确地将该字体应用于我想要的单元格,但也会将该字体应用于其他单元格。例如,我正在从我设置的模板文件创建一个 HSSF excel 工作簿。这个模板文件有已经填充的单元格,这些单元格总是相同的,当我填写我想要的单元格并更改它们的字体大小时,一些预填充的单元格字体大小也会发生变化。但是,只有在我不创建新的 HSSFCellStyle 时才会发生这种情况。问题是如果我只是创建一个新的 CellStyle,我会丢失我为要填充的单元格预设的格式。使用一些示例和代码可能更容易解释。所以这是我能得到的两种不同的输出。

大标签

缺失的边界

在第一张图片中,您可以看到“2400 Hr Clock”已调整大小,即使在我的代码中,我从未将样式应用于该单元格,它仅(应该)应用于日期单元格和时间单元格。这是我这样设置样式的时候:

HSSFCellStyle dataStyle = cell.getCellStyle();
dataStyle.setFont(font);

但是当我设置这样的样式时:

HSSFCellStyle dataStyle = currentWorkbook.createCellStyle();
dataStyle.setFont(font);

我得到了第二张图片中的内容,但是我丢失了以前的格式,例如单元格第一部分的边框。请注意,我没有丢失所有边框的原因是因为单元格是多个单元格合并在一起的,但是您可以看到部分边框丢失了,但是“2400 Hr Clock”没有调整大小。我不确定是什么原因造成的,我不确定接下来要尝试什么。字体是这样创建的:

HSSFFont font = currentWorkbook.createFont();
font.setFontName("Times");
font.setFontHeightInPoints(fontSize);

标签: javaexcelapache-poi

解决方案


解决方案是克隆样式,而不是像这样获取样式:

HSSFCellStyle dataStyle = currentWorkbook.createCellStyle();
dataStyle.cloneStyleFrom(cell.getCellStyle());
dataStyle.setFont(font);

推荐阅读