如何在单元格中右对齐RichTextString?

时间:2014-04-10 17:56:57

标签: java excel apache-poi

当我在一个单元格上设置对齐时,它会对齐一个数字,当单元格是文本时,它就会胜出。

Workbook workbook = new XSSFWorkbook();
CreationHelper creationHelper = workbook.getCreationHelper();
Sheet sheet = workbook.createSheet("Sheet1");
Row row = sheet.createRow(0);

// doesn't
Cell richTextCell = row.createCell(0);
RichTextString richTextString = creationHelper.createRichTextString("So rich!");
richTextCell.setCellValue(richTextString);
CellStyle richTextCellStyle = richTextCell.getCellStyle();
richTextCellStyle.setAlignment(CellStyle.ALIGN_RIGHT);

// works
Cell numberCell = row.createCell(1);
numberCell.setCellValue(12.34);
CellStyle numberCellStyle = numberCell.getCellStyle();
numberCellStyle.setAlignment(CellStyle.ALIGN_RIGHT);


FileOutputStream fileOutputStream = new FileOutputStream("workbook.xlsx");
try {
    workbook.write(fileOutputStream);
} finally {
    fileOutputStream.close();
}

1 个答案:

答案 0 :(得分:4)

在创建带有XSSFWorkbook的.xlsx工作簿时,我重复了这种行为。有趣的是,当我改为HSSFWorkbook时,行为发生了变化,两个单元格都正确对齐。

当我在Excel中打开它时,我仔细查看了.xlsx。对于任一单元格,都没有突出显示“右对齐”的Excel工具栏按钮,即使该数字看起来与右侧对齐。作为参考,工具栏按钮位于“Home”,“Alignment”部分,看起来像这样(大特写):

________
  ______
________
  ______
________
  ______

但是,默认情况下,Excel中的所有数字都已经右对齐。对于.xlsx工作簿来说,如果它是默认的单元格样式并修改它,则不能只获取当前的单元格样式。您必须创建一个新的CellStyle,设置其属性,并为该单元格设置新的单元格样式。

以下代码适用于.xls和.xlsx工作簿。此外,它还只创建一个CellStyle对象,用于所有适用的单元格,演示CellStyle对象的适当重用。

CellStyle rightAligned = workbook.createCellStyle();
rightAligned.setAlignment(CellStyle.ALIGN_RIGHT);

Cell richTextCell = row.createCell(0);
RichTextString richTextString = creationHelper.createRichTextString("So rich!");
richTextCell.setCellValue(richTextString);
richTextCell.setCellStyle(rightAligned);

Cell numberCell = row.createCell(1);
numberCell.setCellValue(12.34);
numberCell.setCellStyle(rightAligned);