java - Apache POI 正在设置错误的单元格字体

标签 java excel apache-poi

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

BigLabels

MissingBorders

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

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

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

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

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

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

最佳答案

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

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

关于java - Apache POI 正在设置错误的单元格字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54262477/

相关文章:

excel - 将列表传递给 Table.RemoveColumns

java - 将具有单键和多个值的映射写入 Excel 工作表

java - 使用 POI 迭代 Excel 文件时如何跳过空白单元格值并选取下一个单元格

java - Intent Activity 类不起作用

java - 引用其他类添加MouseListener

vba - Excel VBA : Cut a row from one sheet onto another and affix date to the end

c# - 'OutOfMemoryException' 读取 20mb XLSX 文件

java - 收集 HashSet/Java 8/Regex Pattern/Stream API

java - 为什么 SparseIntArray.equals(Object) 不起作用?

java - 如何在java中给定单元格索引获取合并单元格的数据?