POI导出Excel 无法居中问题

自己写的测试代码  但是在合并单元格之后,不能居中,迷了很久

后来恍然大悟,解决问题在于逻辑,应该先过去

cellStyle.setAlignment(HorizontalAlignment.CENTER);

然后在设置居中

我怕我没描述清楚,一定要重新获取单元格样式,然后再使用居中(这个是关键),最后附上代码

我这个是水平居中,垂直居中在楼下

cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个完整的示例代码,实现了首行标题合并单元格、标题居中、加粗和单元格边框的要求: ```java import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelExportExample { public static void main(String[] args) { // 创建工作簿和活动表 XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("学生成绩单"); // 设置标题 Row titleRow = sheet.createRow(0); titleRow.createCell(0).setCellValue("学生成绩单"); sheet.addMergedRegion(CellRangeAddress.valueOf("A1:C1")); CellStyle titleStyle = workbook.createCellStyle(); titleStyle.setAlignment(HorizontalAlignment.CENTER); Font titleFont = workbook.createFont(); titleFont.setBold(true); titleStyle.setFont(titleFont); titleRow.getCell(0).setCellStyle(titleStyle); // 设置表头 Row headerRow = sheet.createRow(1); headerRow.createCell(0).setCellValue("姓名"); headerRow.createCell(1).setCellValue("语文"); headerRow.createCell(2).setCellValue("数学"); CellStyle headerStyle = workbook.createCellStyle(); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderRight(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); Font headerFont = workbook.createFont(); headerFont.setBold(true); headerStyle.setFont(headerFont); for (int i = 0; i < headerRow.getLastCellNum(); i++) { headerRow.getCell(i).setCellStyle(headerStyle); } // 设置学生成绩 Row dataRow1 = sheet.createRow(2); dataRow1.createCell(0).setCellValue("张三"); dataRow1.createCell(1).setCellValue(90); dataRow1.createCell(2).setCellValue(80); Row dataRow2 = sheet.createRow(3); dataRow2.createCell(0).setCellValue("李四"); dataRow2.createCell(1).setCellValue(85); dataRow2.createCell(2).setCellValue(92); Row dataRow3 = sheet.createRow(4); dataRow3.createCell(0).setCellValue("王五"); dataRow3.createCell(1).setCellValue(88); dataRow3.createCell(2).setCellValue(87); // 设置单元格边框 CellStyle dataStyle = workbook.createCellStyle(); dataStyle.setAlignment(HorizontalAlignment.CENTER); dataStyle.setVerticalAlignment(VerticalAlignment.CENTER); dataStyle.setBorderTop(BorderStyle.THIN); dataStyle.setBorderRight(BorderStyle.THIN); dataStyle.setBorderBottom(BorderStyle.THIN); dataStyle.setBorderLeft(BorderStyle.THIN); for (int i = 2; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); for (int j = 0; j < row.getLastCellNum(); j++) { row.getCell(j).setCellStyle(dataStyle); } } // 保存文件 try (FileOutputStream outputStream = new FileOutputStream("example.xlsx")) { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们首先创建工作簿和活动表,然后使用 `sheet.addMergedRegion()` 将 A1 到 C1 的单元格合并成一个单元格,并使用 `CellStyle` 和 `Font` 分别设置居中和加粗样式。接着,我们设置了表头和学生成绩,并使用循环为表头和学生成绩的单元格设置了边框和填充颜色样式。最后,我们使用 `workbook.write()` 将工作簿保存到本地。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值