如何在 Java 中格式化 excel 报告?

How to format excel report in Java?

我使用以下方法生成 excel 报告,但我还需要格式化一些单元格,例如:

  1. 加粗headers
  2. 所有单元格的缩进
  3. 列右对齐(价格值)

如何将这些格式应用于以下方法?

private static final String CONTENT_TYPE = "multipart/form-data";
private static final String FILE_NAME = "DemoReport";
private static final String FILE_EXTENSION = ".xlsx";

public MultipartFile export(final UUID uuid) throws IOException {
    final XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Report");
    int rowCount = 0;

    writeTitles(sheet.createRow(rowCount++), titles); // private method

    // code omitted

    final File outputFile = File.createTempFile(FILE_NAME, FILE_EXTENSION);

    try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
        workbook.write(outputStream);
    } catch (IOException e) {
        LoggingUtils.error("error... ", e);
    }

    final FileInputStream input = new FileInputStream(outputFile);

    final String fileName = FILE_NAME.concat(FILE_EXTENSION);
    return new MockMultipartFile(fileName,
            fileName, CONTENT_TYPE, IOUtils.toByteArray(input));
}

我不确定您所说的 对所有单元格进行缩进 是什么意思,但这里有一些片段可以为 header 行创建 CellStyle。这意味着它定义背景和前景色,将单元格内容垂直和水平居中并应用粗体:

// create a CellStyle for your header cells
CellStyle cellStyle = workbook.createCellStyle();
/* 
 * set background fill of the cell
 * (yes, this is called "setFillForegroundColor", why so ever...)
 */
cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// create a font and set its weight to bold for the header row
Font font = workbook.createFont();
font.setBold(true);
// then apply the font to the cell style
cellStyle.setFont(font);
// arrange content alignment for the cell
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// apply the configured cell style
cell.setCellStyle(cellStyle);

之后,对每个 header 单元格使用此单元格样式。

您的代码示例并没有真正为此提供位置,所以我想最好将它放在您的 writeTitles 方法中。

以一般单元格样式为例,您可以为包含价格值的列中的每个单元格设置 VerticalAlignment.RIGHT

您也可以通过 CellStyles 应用所需的边框...只需查看文档即可。