我尝试根据值设置单元格的背景色。请在下面找到相应的代码。
File inputFile = new File(path)
FileInputStream fis = new FileInputStream(inputFile)
XSSFWorkbook inputWorkbook = new XSSFWorkbook(fis)
XSSFWorkbook outputWorkbook = new XSSFWorkbook()
XSSFSheet inputSheet = inputWorkbook.getSheetAt(1)
def inputSheetName = inputWorkbook.getSheetName(1)
XSSFSheet outputSheet = outputWorkbook.createSheet(inputSheetName)
// some code
CellStyle style = outputSheet.getRow(rowIndex).getCell(columnIndex).getCellStyle()
short color = (status.get(listIndex) == 'Passed') ? IndexedColors.GREEN.getIndex() : IndexedColors.RED.getIndex()
style.setFillBackgroundColor(color)
outputSheet.getRow(rowIndex).getCell(columnIndex).setCellStyle(style)
// some code
此代码不会出错,但是未设置单元格背景...
有人可以帮助我吗?感谢您的帮助!
更新1
CellStyle style = outputSheet.getRow(rowIndex).getCell(columnIndex).getCellStyle()
short color = (status.get(listIndex) == 'Passed') ? IndexedColors.GREEN.getIndex() : IndexedColors.RED.getIndex()
style.setFillPattern(FillPatternType.SOLID_FOREGROUND)
style.setFillForegroundColor(color)
outputSheet.getRow(rowIndex).getCell(columnIndex).setCellStyle(style)
更新2
以下代码的目标是将excel文件的内容复制并粘贴到另一个文件中。我想根据状态值设置单元格的颜色。
def function(dateTimeOfTestSuite, status, executionDateTime) {
File inputFile = new File(path)
FileInputStream fis = new FileInputStream(inputFile)
XSSFWorkbook inputWorkbook = new XSSFWorkbook(fis)
def inputSheetCount = inputWorkbook.getNumberOfSheets()
def directoryName = 'Data Files\\Reports\\' + name
File directory = new File(directoryName)
if (!directory.exists())
directory.mkdirs()
def excelOutputFileName = directory.path + '\\' + dateTimeOfTestSuite + '.xlsx'
excelOutputFileName = excelOutputFileName.replace(':', '-')
File outputFile = new File(excelOutputFileName)
FileOutputStream fos = new FileOutputStream(outputFile)
XSSFWorkbook outputWorkbook = new XSSFWorkbook()
for(int i = 0; i < inputSheetCount; i++) {
XSSFSheet inputSheet = inputWorkbook.getSheetAt(i)
def inputSheetName = inputWorkbook.getSheetName(i)
XSSFSheet outputSheet = outputWorkbook.createSheet(inputSheetName)
def numberOfRows = inputSheet.getPhysicalNumberOfRows()
def numberOfColumns = inputSheet.getRow(0).getPhysicalNumberOfCells()
def listIndex = 0
def rowIndex = 0
outputSheet.createRow(0)
while (rowIndex < numberOfRows && inputSheet.getRow(rowIndex).getCell(0).getCellType() != Cell.CELL_TYPE_BLANK) {
def columnIndex = 0
while (columnIndex < numberOfColumns && inputSheet.getRow(0).getCell(columnIndex).getCellType() != Cell.CELL_TYPE_BLANK) {
def value = (inputSheet.getRow(rowIndex).getCell(columnIndex).toString() == 'null') ? '' : inputSheet.getRow(rowIndex).getCell(columnIndex).toString()
if (columnIndex == 0)
outputSheet.createRow(rowIndex).createCell(columnIndex).setCellValue(value)
else
outputSheet.getRow(rowIndex).createCell(columnIndex).setCellValue(value)
outputSheet.autoSizeColumn(columnIndex)
columnIndex++
}
if(inputSheetName == "input") {
if(rowIndex == 0) {
outputSheet.getRow(0).createCell(columnIndex).setCellValue('Status')
outputSheet.getRow(0).createCell(columnIndex + 1).setCellValue('ExecutedAt')
}
else if (rowIndex > 1) {
outputSheet.getRow(rowIndex).createCell(columnIndex).setCellValue(status.get(listIndex))
if(status.get(listIndex) != 'No run') {
outputSheet.getRow(rowIndex).createCell(columnIndex + 1).setCellValue(executionDateTime.get(listIndex))
CellStyle style = outputSheet.getRow(rowIndex).getCell(columnIndex).getCellStyle()
def color = (status.get(listIndex) == 'Passed') ? IndexedColors.GREEN.getIndex() : IndexedColors.RED.getIndex()
style.setFillPattern(FillPatternType.SOLID_FOREGROUND)
style.setFillForegroundColor(color)
outputSheet.getRow(rowIndex).getCell(columnIndex).setCellStyle(style)
}
listIndex++
}
outputSheet.autoSizeColumn(columnIndex)
outputSheet.autoSizeColumn(columnIndex + 1)
}
rowIndex++
}
}
outputWorkbook.write(fos)
fos.close()
}
解决方案
XSSFCellStyle style = outputWorkbook.createCellStyle()
def color = (status.get(listIndex) == 'Passed') ? IndexedColors.GREEN.getIndex() : IndexedColors.RED.getIndex()
style.setFillPattern(FillPatternType.SOLID_FOREGROUND)
style.setFillForegroundColor(color)
outputSheet.getRow(rowIndex).getCell(columnIndex).setCellStyle(style)
答案 0 :(得分:2)
实际上与背景无关。它是前景色。另外,您需要像这样指定FillPattern
:
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setFillForegroundColor(color);
作为原因,为什么是setFillForegroundColor
而不是setFillBackgroundColor
,我找不到任何信息,确切的区别是什么,但是以下代码显示了它们的工作原理:
style.setFillPattern(FillPatternType.LEAST_DOTS);
style.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
style.setFillBackgroundColor(IndexedColors.RED.getIndex());
结果如下:
据此,我猜想setFillBackgroundColor
只能与setFillForegroundColor
结合使用才能创建这样的模式。