java - 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);
解决方案
解决方案是克隆样式,而不是像这样获取样式:
HSSFCellStyle dataStyle = currentWorkbook.createCellStyle();
dataStyle.cloneStyleFrom(cell.getCellStyle());
dataStyle.setFont(font);
推荐阅读
- javascript - 将动态创建的标签移动到select2中的列表底部
- sql - 访问前 N 个查询,其中 N 在另一个表中给出
- python - Python IDLE 如何从编辑器到 shell
- php - Laravel/Lumen Tymon/JWT 通过电话号码和密码
- c++ - 从 STM32CubeIDE 启动 QEMU 模拟器的问题
- javascript - 在 btn 单击时将动态元素添加到 html 时更新淘汰视图模型
- android - 如何从片段 Android 工作室中的文本视图访问数据
- c++ - 如何从不均匀分布的文件中添加字符?
- jquery - 变量中对象的 JQuery 取消绑定事件
- c# - 如何使用 C# 和 HttpRequestMessage 在 Trello 中设置自定义字段?