利用 POI 到处 excel

本贴最后更新于 2729 天前,其中的信息可能已经沧海桑田

POI 版本 3.15,java 使用框架 SpringBoot

先进行命名到处的 excel 的文件名,把汉字进行字节码转换

response.setHeader("Content-Disposition", "attachment;filename="
			+new String(("内部讲师个人所得税推算公式").getBytes("gb2312"),"ISO-8859-1")+".xlsx");

创建 Workbook 和输出流

HSSFWorkbook workbook = new HSSFWorkbook(); 
OutputStream out = response.getOutputStream();

创建 Sheet 页

  HSSFSheet sheet = workbook.createSheet("(导出)外部讲师审核表");

创建第一行和第一个单元格

// 第一行
HSSFRow row0 = sheet.createRow(0);
Cell cell00 = row0.createCell(0);

创建行高和单元格宽度

row0.setHeightInPoints(55); 
sheet.setColumnWidth(0, 20*256);

合并单元格,参数分别是 开始行、 结束行、开始列、结束列

如合并第一个第一行第一个单元格到底 11 个单元格

sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 11));

创建 workbook 样式

HSSFCellStyle style = workbook.createCellStyle();

创建设置字体的相关样式

font.setFontName("宋体");//设置字体名称 
font.setFontHeightInPoints((short) 14);//设置字号

字体加粗

font.setBold(true);

创建有边框、左边框、下边框,让字体水平和垂直居中,把字体样式放到样式中

style.setBorderRight(BorderStyle._THIN_);//右边框 
style.setAlignment(HorizontalAlignment._CENTER_); //水平居中 
style.setVerticalAlignment(VerticalAlignment._CENTER_);//垂直居中
style.setBorderBottom(BorderStyle._THIN_);//下边框 
style.setBorderLeft(BorderStyle._THIN_);//左边框 
style.setFont(font);//选择需要用到的字体格式

单元格引用样式

cell00.setCellStyle(style);

给单元格自定义函数

如 定义 sum 函数从单元格 J3 + 到 J 的 list 集合长度 +2 个单元格

Integer n = list.size() + 2;
String num0 = "J" + n.toString();
cell9.setCellFormula("sum(J3:"+num0+")");

设置单元格样式,是 Double 类型的格式,可以用来写函数进行计算

cell[j].setCellValue(Double.parseDouble(value[i][j].toString()));
style.setDataFormat(HSSFDataFormat.getBuiltinFormat_("0.00"));

单元格位置不够的时候进行强制转换

style1.setWrapText(true); // 强制换行

给单元格赋值

cell15.setCellValue("备注:\n" );

给单元格设置背景色和背景色样式

style1.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
style1.setFillPattern(FillPatternType.SOLID_FOREGROUND);

设置单元格的位置进行下拉菜单,参数分别是 开始行、结束行、开始列、结束列

如 从第三行第 12 列开始,到 list 长度 +2 个行数的 12 个单元格结算

String [] paymentList={"外付","合同","架构合同"}; 
String [] recommendList = {"主办方","移动学院"}; 
CellRangeAddressList regions = new CellRangeAddressList(2,list.size()+2,12,12); 
CellRangeAddressList recommendRegions = new CellRangeAddressList(2,list.size()+2,13,13); 
DVConstraint constraint = DVConstraint.createExplicitListConstraint(paymentList);
DVConstraint recommendConstraint = DVConstraint.createExplicitListConstraint(recommendList); 
HSSFDataValidation dataValidation = new HSSFDataValidation(regions,constraint); 
HSSFDataValidation validation = new HSSFDataValidation(recommendRegions,recommendConstraint);
sheet.addValidationData(dataValidation);
sheet.addValidationData(validation);

写下面的 sheet 可以定义一个二维数组存储表头列,把下面的数据查出来进行存储到定义的二维数组中

写下面的 sheet 的相关代码

先进行循环第一层,把表头取出来,然后再进行循环获取单个赋值进行取数据

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • POI
    23 引用 • 21 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • chenlei65368

    标题写错了

  • 其他回帖
  • someone

    已经改过来了!谢谢