java - 使用 getPhysicalNumberOfCells 方法将 css 应用于 POI 生成的单元格?

标签 java jsf primefaces apache-poi

我正在使用扩展器 primefaces 开发 JSF,碰巧我是 moficando excel 我生成了默认报告,我只需要在生成的单元格中详细应用样式,我只能设置标题的样式。

private void columnsCustomers() {
    this.setColumnCustomer(new ArrayList<ValidColumnKey>());        
    this.getColumnCustomer().add(new ValidColumnKey(1, "Codigo", "code"));  
    this.getColumnCustomer().add(new ValidColumnKey(2, "Nombre", "name"));  
    this.getColumnCustomer().add(new ValidColumnKey(3, "Nombre Comercial", "comercialName"));  
    this.getColumnCustomer().add(new ValidColumnKey(4, "Estado", "isActive"));
}

public void postProcessXLS(Object document) {  
    HSSFWorkbook wb = (HSSFWorkbook) document;  
    HSSFSheet sheet = wb.getSheetAt(0);  
    //HSSFSheet sheet = wb.createSheet(getCustomer().getName());
    HSSFRow header = sheet.getRow(0);  

    HSSFRow rowUser0  = sheet.createRow((short) 0);

    HSSFCellStyle styleHeader = (HSSFCellStyle) wb.createCellStyle();
    styleHeader.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    HSSFFont fontHeader = (HSSFFont) wb.createFont();
    fontHeader.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    fontHeader.setColor(HSSFColor.WHITE.index);
    styleHeader.setFillForegroundColor(HSSFColor.DARK_BLUE.index);          
    styleHeader.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);         
    styleHeader.setFont(fontHeader);
    styleHeader.setBorderBottom((short) 1);
    styleHeader.setBorderLeft((short) 1);           
    styleHeader.setBorderRight((short) 1);
    styleHeader.setBorderTop((short) 1);

    HSSFCell indice = rowUser0.createCell((short) 0);
    indice.setCellValue("N°");
    indice.setCellStyle(styleHeader);

    int nro = 1;
    for(ValidColumnKey column : this.getColumnCustomer()){
        HSSFCell hnro   = rowUser0.createCell((short) nro);
        hnro.setCellValue(column.getDescripcion());
        hnro.setCellStyle(styleHeader);
        nro++;          
    }

    HSSFCellStyle styleCellWhite = (HSSFCellStyle) wb.createCellStyle();
    HSSFFont fontCellWhite = (HSSFFont) wb.createFont();
    fontCellWhite.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
    styleCellWhite.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    styleCellWhite.setBorderBottom((short) 1);
    styleCellWhite.setBorderLeft((short) 1);            
    styleCellWhite.setBorderRight((short) 1);
    styleCellWhite.setBorderTop((short) 1);

    for(int i=0; i < header.getPhysicalNumberOfCells();i++) {  
        HSSFCell cell = header.getCell(i);    
        cell.setCellStyle(styleHeader);
    }  
}

图片:http://s2.subirimagenes.com/otros/previo/thump_8748813excelpoi.jpg

正如您在图像中看到的那样,只是缺少在边缘的详细 Excel 中应用的样式,我应用了该样式但显然不起作用,该方法将 header.getPhysicalNumberOfCells

有人可以指导我吗,他们非常感激。

最佳答案

对于您的工作表问题:工作簿和工作表已由 PF 在这一步创建。您可能只想简单地(重新)命名该工作表:

wb.setSheetName(0, getCustomer().getName());

对于您的其他问题(目前还不清楚),我想您想使用您的样式 styleCellWhite 格式化数据值。这是一种方法:

//iterates lines, then iterate each column giving style to each cell
for (int r=1; r<sheet.getLastRowNum(); r++) {
    HSSFRow row = sheet.getRow(r);
    for (int i=0; i<row.getPhysicalNumberOfCells(); i++) {
        row.getCell(i).setCellStyle(styleCellWhite);
    }
}

另一句话

您正处于后处理方法中。这意味着文档、工作表和单元格已经创建并填充。您不应该创建行或单元格,而只能在此处修改它们(获取它们并给出样式、固定值或标题。)。

关于java - 使用 getPhysicalNumberOfCells 方法将 css 应用于 POI 生成的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752601/

相关文章:

JavaFx 节点大小

file-upload - 未使用 web.xml 时的 Primefaces 文件上传过滤器

java - AnnotationSessionFactoryBean 的问题

java - TFL 开放数据的 JSON 解析

javascript - 素面 : get geocoder address from google Map to ManagedBean

jsf - 通过选择复选框启用和禁用组件

java - 使用maven使jar成为jsf中的自定义组件

jquery-ui - 带有 Primefaces 的 JQuery UI

java - HashMap 缓存中的同步

jsf - 为什么<ui :fragment rendered> not evaluated on <h:outputStylesheet> and <h:outputScript>