Excel文件导出功能实现以及注意的

创建一个工作簿:

XSSFWorkbook workbook new XSSFWorkbook();

创建一个工作表:

XSSfSheet sheet= workbook.creatSheet();

创建一个行

//创建行需要注意的是:如果对同一行中进行数据操作,那么就要一定要保持行对象的唯一性,
//不然数据会操作不成功,创建一个行对象,对其添加数据,就会把之前的给覆盖掉。
XSSFRow row = sheet.creatRow();

创建一个单元格

//在对单元格进行样式设计的时候,需要对每一个单元格进行数据添加
XSSFCell cel = row.creatCell();

合并单元格

//从零开始计数
CellRangeAdress cellRangeAdress = new CellRangeAdress(起始行,结束行,起始列,结束列);
//合并单元格之后需要对单元格进行添加到表中
addMergedRegion(CellRangeAdress);

添加样式

XSSFCellStyle style = workbook.creatCellStyle();
//设置左右居中
style.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//设置上下居中
style.setVerticalAlignment(VerticalAlignment.CENTER);
//设置拥有单元格边框
style.setBorderBottom(BorderStyle.THIN);//下边框
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
style.setBorderLeft(BorderStyle.THIN);//左边框
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
style.setBorderRight(BorderStyle.THIN);//右边框
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
style.setBorderTop(BorderStyle.THIN);//上边框
style.setTopBorderColor(IndexedColors.BLACK.getIndex());

对合并的单元格进行添加样式

//需要注意的是对合并单元格添加样式后,如果后面对同行没有合并的单元格添添加样式后,前面合并
//单元格的样式失效。解决方式就是将前面合并单元格后没有值的单元格设置为空值,同时添加样式。
setBorder(callRangeAddress1,sheet,workbook);

//setBorder是一个方法
public void setBorder(CellRangeAddress cellRangeAddress, XSSFSheet sheet,
                          XSSFWorkbook wb) throws Exception {
    RegionUtil.setBorderLeft(1, cellRangeAddress, sheet, wb);
    RegionUtil.setBorderBottom(1, cellRangeAddress, sheet, wb);
    RegionUtil.setBorderRight(1, cellRangeAddress, sheet, wb);
    RegionUtil.setBorderTop(1, cellRangeAddress, sheet, wb);
}

实现列宽的自适应

// 调整每一列宽度
            sheet.autoSizeColumn((short) i);
            // 解决自动设置列宽中文失效的问题
            int length = cell1.getStringCellValue().getBytes().length;

            sheet.setColumnWidth(i, length*240);

设置单元格的背景颜色

poi版本3以上能用

cellStyle.setFillForegroundColor(HSSFColor.RED.index);
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

在这里插入图片描述

1.IndexedColors.AQUA.getIndex()
IndexedColors.AUTOMATIC.getIndex()
IndexedColors.BLUE.getIndex()
IndexedColors.BLUE_GREY.getIndex()
IndexedColors.BRIGHT_GREEN.getIndex()
IndexedColors.BROWN.getIndex()
IndexedColors.CORAL.getIndex()
IndexedColors.CORNFLOWER_BLUE.getIndex()
IndexedColors.DARK_BLUE.getIndex()
IndexedColors.DARK_GREEN.getIndex()
IndexedColors.DARK_RED.getIndex()
IndexedColors.DARK_TEAL.getIndex()
IndexedColors.DARK_YELLOW.getIndex()
IndexedColors.GOLD.getIndex()
IndexedColors.GREEN.getIndex()
IndexedColors.GREY_25_PERCENT.getIndex()
IndexedColors.GREY_40_PERCENT.getIndex()
IndexedColors.GREY_50_PERCENT.getIndex()
IndexedColors.GREY_80_PERCENT.getIndex()
IndexedColors.INDIGO.getIndex()
IndexedColors.LAVENDER.getIndex()
IndexedColors.LEMON_CHIFFON.getIndex()
IndexedColors.LIGHT_BLUE.getIndex()
IndexedColors.LEMON_CHIFFON.getIndex()
IndexedColors.LIGHT_BLUE.getIndex()
IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()
IndexedColors.LIGHT_GREEN.getIndex()
IndexedColors.LIGHT_ORANGE.getIndex()
IndexedColors.LIGHT_TURQUOISE.getIndex()
IndexedColors.LIGHT_YELLOW.getIndex()
IndexedColors.LIME.getIndex()
IndexedColors.MAROON.getIndex()
IndexedColors.OLIVE_GREEN.getIndex()
IndexedColors.ORANGE.getIndex()
IndexedColors.ORCHID.getIndex()
IndexedColors.PALE_BLUE.getIndex()
IndexedColors.PINK.getIndex()
IndexedColors.PLUM.getIndex()
IndexedColors.RED.getIndex()
IndexedColors.ROSE.getIndex()
IndexedColors.ROYAL_BLUE.getIndex()
IndexedColors.SEA_GREEN.getIndex()
IndexedColors.SKY_BLUE.getIndex()
IndexedColors.TAN.getIndex()
IndexedColors.TEAL.getIndex()
IndexedColors.TURQUOISE.getIndex()
IndexedColors.VIOLET.getIndex()
IndexedColors.WHITE.getIndex()
IndexedColors.YELLOW.getIndex()

设置颜色的3种方式

1.RGB

style.setFillForegroundColor(new XSSFColor(new Color(0, 0, 0)));

2.颜色的16进制

style.setFillForegroundColor(Color.decode("#D8D8D8"));

3.POI里面固定的一些颜色

XSSFColor clr = new XSSFColor();

clr.setIndexed(IndexedColors.RED.getIndex());

style.setFillForegroundColor(clr);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值