1.前言2。单元格锁定3。设置列宽4。设置行高5。字体设置,颜色6。合并单元格
1.前言
虽然Poi框架支持从JAVA代码向excel导出数据,但在实际开发中,通常需要设置excel字体、颜色、行高和列宽等属性,有时需要锁定单元格,以防止其他人篡改数据。
废话不多,直接上传代码。
2.锁定储存格
汇出Excel时,您可以自然地汇入excel。例如,您可以汇出、修改和重新汇入某些资料。但是此时,有些基本信息不希望用户随意修改。这里用的是excel的锁。
(密码)
代码:
//Excel文件创建
hssf workbook workbook=new hssf workbook();
hssf sheet sheet=workbook . create sheet(' yyymmdd ');
//图纸锁定
(' zgd ');
在这种情况下,此工作表被锁定
但是我们还希望能打开一些单元格进行修改,这时要详细设置
创建CellStyle:
cell style unlock cell=workbook . createcellstyle();
unlock cell . set locked(false);
然后给不需要锁定的单元格cellStyle
//dataRow行中的第I个单元格设置为不锁定
Da(i)。setCellStyle(unlock cell);
以微服务思想为基础,在B2C电商场景下构建的项目的实践。核心技术栈是Spring Boot Dubbo。今后将重组Spring Cloud Alibaba。
项目地址:
3.设置列宽
锁定图纸后,将出现无法更改列宽的问题
现在不得不自己设定10宽度。目前,设置在互联网上找到的列宽的方法如下。
1.按比例列宽:
(1);
(1、true);
两种方法都是可变列宽,但此方法仅在以下版本中可用:poi版本请注意不要太旧。
注意:第一种方法不适合合并单元格中的单元格,因此必须使用第二种方法。
测试后,这个适应性API遇到行数多的数据需要很多时间,1000行需要两分钟!所以请尽量不要使用。
();
;
而且,这两种方法对英语数字有好处,但对汉语的支持并不好。
2.使用数组设置近似宽度,手动设置set宽度
Int[] width={xxx,XXX };
For循环
(I,宽度[I]);
3.根据数据列中最长字符串的长度设置宽度
所以要注意DIY :
检查此列中最长的字符串,然后单击
Int length=()。length
((短)列数,(短) (长度* 256));
这里我反复尝试后,我个人认为将最大宽度限制在10000到15000左右是合适的,剩下的交给了excel的自动换行。
像我这样的地方有很多行数据,不知道哪一行的内容最长。这里简单地提供了两种思维方式。(方法很多,可以达到目的。):
表示使用MapInteger、List和key放入List中的特定列
是每行的这一列的内容的长度 , 每遍历一行的一列, 就map.put(i, li(length)), 然后用Collec(i))来获取第i列的最长的长度我这里使用的第二种:
设置自动换行后,不要设置固定的行高,否则超出的部分也会被遮住不显示
// 创建Excel文件 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("sheet"); //设置样式 CellStyle blackStyle = workbook.createCellStyle(); //自动换行*重要* blackS(true); //存储最大列宽 Map<Integer,Integer> maxWidth = new HashMap<>(); // 标题行 HSSFRow titleRow = (0); (20);//目的是想把行高设置成20px (0).setCellValue("sku编号"); (1).setCellValue("商品标题"); (2).setCellValue("商品名"); // 初始化标题的列宽,字体 for (int i= 0; i<=3;i++){ maxWid(i,(i).getStringCellValue().getBytes().length * 256 + 200); (i).setCellStyle(blackStyle);//设置自动换行 } for (Map<String, Object> map : list) { int currentRowNum = () + 1; //数据行 HSSFRow dataRow = (currentRowNum); // 记录这一行的每列的长度 List<Object> valueList = new ArrayList<Object>(); String val0 = map.get("skuId") == null ? "—" : ((Double) ("skuId"))).intValue()+""; valueLi(val0); da(0).setCellValue(val0); String val1 = map.get("title") == null ? "" : map.get("title").toString(); valueLi(val1); da(1).setCellValue(val1); String val2 = map.get("goodsName") == null ? "" : map.get("goodsName").toString(); valueLi(val2); da(2).setCellValue(val2); String val3 = map.get("catName") == null ? "" : map.get("catName").toString(); valueLi(val3); da(3).setCellValue(val3); String val4 = map.get("brandName") == null ? "" : map.get("brandName").toString(); for(int i = 0;i<=3;i++){ int length = valueLi(i).toString().getBytes().length * 256 + 200; //这里把宽度最大限制到15000 if (length>15000){ length = 15000; } maxWid(i,Ma(length,maxWid(i))); da(i).setCellStyle(blackStyle);//设置自动换行 } } for (int i= 0; i<=3;i++){ //设置列宽 (i,maxWid(i)); }
现在的话, 列宽虽然是比较生硬的套用内容长度来设置, 不过也比之前好多了, 列宽是不能超过256*256的,否则会报错,所以我这里设置的最大列宽为15000,超出的部分会自动换行
4. 设置行高
行高就很简单了,
(20);//目的是想把行高设置成20px
注意,设置了固定行高,自动换行就不会自适应行高了
5. 设置字体,颜色
创建CellStyle , 然后创建HSSFFont , 再把HSSFFont注入给CellStyle , 在把CellStyle给cell设置
// 设置字体 CellStyle redStyle = workbook.createCellStyle(); HSSFFont redFont = workbook.createFont(); //颜色 redFont.setColor); //设置字体大小 redFont.setFontHeightInPoints((short) 10); //字体 ("宋体"); redS(redFont); HSSFCell cell13 = (13); cell13.setCellStyle(redStyle); cell13.setCellValue("注意:只允许修改销售价,供应价,市场价和库存");
6. 合并单元格
合并单元格的话,建议先合并,合并之后,在合并的第一行第一列set值就可以了
//这里代表在第0行开始,到0行结束,从0列开始,到10列结束,进行合并,也就是合并第0行的0-10个单元格 CellRangeAddress cellRange1 = new CellRangeAddress(0, 0, (short) 0, (short) 10); (cellRange1); CellRangeAddress
本人花费2个月时间,整理了一套java开发技术资料,内容涵盖java基础,分布式、微服务等主流技术资料,包含大厂面经,学习笔记、源码讲义、项目实战、讲解视频。
希望可以帮助一些想通过自学提升能力的朋友,领取资料,扫码关注一下
记得转发+关注+私信
私信回复【2022面试资料】
领取更多学习资料
1.《【poi怎么设置excel】POI高级用法、单元格锁定、行高设置、字体设置、新手快速收集》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《【poi怎么设置excel】POI高级用法、单元格锁定、行高设置、字体设置、新手快速收集》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2531242.html