我在使用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);
答案 0 :(得分:2)
解决方案是克隆样式,而不是像这样获得样式:
Option Explicit
Sub UseOfArray()
Dim workbook1 As Workbook
Set workbook1 = ThisWorkbook
Dim i As Long
Dim conditions_in_array(1 To 20) As Long
For i = 1 To Worksheets.count
If IsEmpty(workbook1.Worksheets("Sheet" & i).Cells(1, 1)) Then conditions_in_array(1) = conditions_in_array(1) + 1
If workbook1.Worksheets("Sheet" & i).Cells(1, 1).Interior.Color = 16777215 Then conditions_in_array(2) = conditions_in_array(2) + 1
Next i
Debug.Print "conditions_in_array(1): "; conditions_in_array(1); vbNewLine; "conditions_in_array(2): "; conditions_in_array(2)
End Sub