EasyPoi - 添加樣式


使用EasyPoi模板時,給滿足一定條件的數據添加不同的樣式。
給語文成績高於數學成績的學生的語文成績添加紅色背景色:
public void excelDownload(Map<String, Object> dataMap, TemplateExportParams params, String fileName, HttpServletResponse response) throws IOException {
try{
OutputStream out = response.getOutputStream();
Workbook workbook = ExcelExportUtil.exportExcel(params, dataMap);
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") );

//獲取表格對象
Sheet sheet =workbook.getSheetAt(0);
//表格行數
int lastRowNum = sheet.getLastRowNum();
// 獲取列數
int physicalNumberOfCells = sheet.getRow(0).getPhysicalNumberOfCells();
//開始遍歷單元格並進行判斷是否渲染
for (int i = 3; i <= lastRowNum - 1; i++) {
//獲取每行對象
Row row = sheet.getRow(i);
//獲取單元格對象
Cell cell = row.getCell(5);
//獲取單元格樣式對象
CellStyle cellStyle = workbook.createCellStyle();
//保留原有樣式
cellStyle.cloneStyleFrom(cell.getCellStyle());
//獲取單元格內容對象
Font font = workbook.createFont();
//一定要裝入,樣式中才會生效
cellStyle.setFont(font);
//獲取當前單元格 中的value
double math = Double.valueOf(sheet.getRow(i).getCell(2).getStringCellValue());
double chanese = Double.valueOf(sheet.getRow(i).getCell(3).getStringCellValue());
if (chanses > math) {
//設置單元格背景顏色
cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
}
cell.setCellStyle(cellStyle);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
response.setHeader("Content-Length", String.valueOf(baos.size()));
out.write( baos.toByteArray() );
} catch (Exception e) {
log.error("導出失敗", JSON.toJSONString(dataMap), e);
}
}

模板如下:

 

 

 輸出結果如下:

保留樣式的語句cellStyle.cloneStyleFrom(cell.getCellStyle()),如果沒加的話語文分數這一列的樣式會初始化(最明顯的是邊框線沒有了)。加上之后字體主題和字號還是與原來不一致,原本是宋體12號,輸出結果是Calibri 11號,有沒有辦法保留原本的字體,求大神指導一下。

參考鏈接:https://www.cnblogs.com/tiankx/p/13920025.html

原文的示例更具體,有興趣的可以移步

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM