如何在 Java 中格式化 excel 报告?
How to format excel report in Java?
我使用以下方法生成 excel 报告,但我还需要格式化一些单元格,例如:
- 加粗headers
- 所有单元格的缩进
- 列右对齐(价格值)
如何将这些格式应用于以下方法?
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
。
您也可以通过 CellStyle
s 应用所需的边框...只需查看文档即可。
我使用以下方法生成 excel 报告,但我还需要格式化一些单元格,例如:
- 加粗headers
- 所有单元格的缩进
- 列右对齐(价格值)
如何将这些格式应用于以下方法?
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
。
您也可以通过 CellStyle
s 应用所需的边框...只需查看文档即可。