【POI xlsx】使用POI对xlsx的单元格样式进行设置 / 使用POI对xlsx的字体进行设置
POI的jar包版本3.14
3.17有很多就不一样了!!!!
涉及到的样式都在代码中有说明:
package com.it.poiTest; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.sl.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Color;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class MoreStyleCell {
public static void main(String[] args) {
XSSFWorkbook workbook = new XSSFWorkbook();
try {
FileOutputStream out = new FileOutputStream("moreStyleWrokNook.xlsx");
XSSFSheet sheet = workbook.createSheet("stylesheet"); /**
* 简单设置行高
*/
//第一行
Row row0 = sheet.createRow(0);
row0.setHeight((short) (500));
//第6列
Cell cell = row0.createCell(5);
cell.setCellValue("height=500"); /**
* 测试合并单元格之后的各个位置
*/
//合并单元格 参数1:第一行 / 参数2:最后一行 / 参数3:第一列 / 参数4:最后一列 [在此范围之内]
sheet.addMergedRegion(new CellRangeAddress(1,3,1,4));
Row row1 = sheet.createRow(1);
Cell cell1 = row1.createCell(0);
cell1.setCellValue("第二行 第一列");
Cell cell2 = row1.createCell(1);
cell2.setCellValue("第二行,第二列。应该是合并单元格");
//既然合并了单元格,查看一下1.2在什么位置 【证明并没有出现】
Cell cell3 = row1.createCell(2);
cell3.setCellValue("第二行,第三列"); Cell cell4 = row1.createCell(5);
cell4.setCellValue("第二行,第五列,也就是合并单元格之后的第三列"); /**
* 测试cellstyle的设置--单元格居中设置以及单元格内文字换行设置
*/
row0 = sheet.createRow(4);
row0.setHeight((short)1000);
cell1 = row0.createCell(0);
cell1.setCellValue("第五行 height=1000");
//设置某一列的宽度
sheet.setColumnWidth(0, 9000);
XSSFCellStyle style1 = workbook.createCellStyle();
//设置style---cell中水平的对齐方式
style1.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//设置style---cell中垂直方向的对齐方式
style1.setVerticalAlignment(XSSFCellStyle.VERTICAL_TOP);
//给某个确定的cell设置样式
cell1.setCellStyle(style1);
//为cell单元格追加内容
//获取到cell内的值【getRichStringCellValue获取富文本类型的值,除了小数类型的使用这个方法获取getNumericCellValue,其余类型均可以使用此方法获取toString之后就可以转化为其他的数据类型】
String cell1Value = cell1.getRichStringCellValue().toString();
//cell1.getNumericCellValue();
//加上\n之后无法自动换行
cell1.setCellValue(cell1Value+"\n"+"水平居中"+"\n"+"垂直居上");
//设置style自动换行 这样就可以自动换行了
style1.setWrapText(true);
cell1.setCellValue(cell1Value+"\n"+"水平居中"+"\n"+"垂直居上"+"\n"+"自动换行");
System.out.println(cell1Value); /**
* style样式设置--设置border的边框样式以及颜色
*/
row0 = sheet.createRow(5);
row0.setHeight((short)1000);
cell1 = row0.createCell(5);
cell1.setCellValue(6.6);
XSSFCellStyle style2 = workbook.createCellStyle();
style2.setBorderBottom(XSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(XSSFCellStyle.BORDER_HAIR);
style2.setBorderRight(XSSFCellStyle.BORDER_DOTTED);
style2.setBorderTop(XSSFCellStyle.BORDER_NONE);
//颜色三种方式 给出 方式1:
style2.setBottomBorderColor(IndexedColors.BLUE.getIndex());
//方式2
XSSFColor color = new XSSFColor();
byte[] a = {127,0,13};
//color.setRGB(a);
color.setARGBHex("FF2906");
style2.setLeftBorderColor(color);
//方式3
style2.setRightBorderColor(HSSFColor.BLACK.index);
cell1.setCellStyle(style2); /**
* style设置---设置单元格的背景色与填充效果
*/
row0 = sheet.createRow(6);
row0.setHeight((short) 1200);
cell1 = row0.createCell(6);
cell1.setCellValue(7.7);
XSSFCellStyle style3 = workbook.createCellStyle();
style3.setFillBackgroundColor(HSSFColor.RED.index);
//设置单元格的填充效果
style3.setFillPattern(XSSFCellStyle.LEAST_DOTS);
cell1.setCellStyle(style3); /**
* style设置--设置单元格的前置填充颜色
*/
row0 = sheet.createRow(7);
row0.setHeight((short) 1200);
cell1 = row0.createCell(7);
cell1.setCellValue(8.8);
XSSFCellStyle style4 = workbook.createCellStyle();
style4.setFillForegroundColor(IndexedColors.GREEN.index);
style4.setFillPattern(XSSFCellStyle.ALIGN_FILL);
cell1.setCellStyle(style4); workbook.write(out); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【着重说明一点】:
合并单元格的方法
hssfSheet.addMergedRegion(new CellRangeAddress(3,11,1,4))
参数1 从第4行开始
参数2 到第12行结束 包含第12行
参数3 从第2列开始
参数4 到第5列结束 包含第5列
如果【开始行和结束行在同一行】 或者 【开始列和结束列在同一列】
这两种情况允许同时出现一种或者都不出现。
如果【开始行和结束行在同一行】 和 【开始列和结束列在同一列】同时出现的话,那就没有合并单元格的意义了。同时就会报错:【错误行号和上面例子中行号并不匹配,不必在意】
java.lang.IllegalArgumentException: Merged region B4 must contain 2 or more cells
同样,如果控制不好,还会出现如下错误:
java.lang.IllegalStateException: Cannot add merged region B5:B6 to sheet because it overlaps with an existing merged region (B4:B5).
不能将合并的区域B5:B6添加到表格,因为它与现有的合并区域重叠(B4:B5)
就是你在下面合并的单元格 想要把上面已经合并的一部分单元格重叠了。
样式最后的图例:

其中,cell的边框类型分别如下:
|
边框范例图 |
对应的静态值 |
|
|
HSSFCellStyle. BORDER_DOTTED |
|
|
HSSFCellStyle. BORDER_HAIR |
|
|
HSSFCellStyle. BORDER_DASH_DOT_DOT |
|
|
HSSFCellStyle. BORDER_DASH_DOT |
|
|
HSSFCellStyle. BORDER_DASHED |
|
|
HSSFCellStyle. BORDER_THIN |
|
|
HSSFCellStyle. BORDER_MEDIUM_DASH_DOT_DOT |
|
|
HSSFCellStyle. BORDER_SLANTED_DASH_DOT |
|
|
HSSFCellStyle. BORDER_MEDIUM_DASH_DOT |
|
|
HSSFCellStyle. BORDER_MEDIUM_DASHED |
|
|
HSSFCellStyle. BORDER_MEDIUM |
|
|
HSSFCellStyle. BORDER_THICK |
|
|
HSSFCellStyle. BORDER_DOUBLE |
其中,cell的背景纹理图片如下:
|
图案样式 |
常量 |
|
|
HSSFCellStyle. NO_FILL |
|
|
HSSFCellStyle. ALT_BARS |
|
|
HSSFCellStyle. FINE_DOTS |
|
|
HSSFCellStyle. SPARSE_DOTS |
|
|
HSSFCellStyle. LESS_DOTS |
|
|
HSSFCellStyle. LEAST_DOTS |
|
|
HSSFCellStyle. BRICKS |
|
|
HSSFCellStyle. BIG_SPOTS |
|
|
HSSFCellStyle. THICK_FORWARD_DIAG |
|
|
HSSFCellStyle. THICK_BACKWARD_DIAG |
|
|
HSSFCellStyle. THICK_VERT_BANDS |
|
|
HSSFCellStyle. THICK_HORZ_BANDS |
|
|
HSSFCellStyle. THIN_HORZ_BANDS |
|
|
HSSFCellStyle. THIN_VERT_BANDS |
|
|
HSSFCellStyle. THIN_BACKWARD_DIAG |
|
|
HSSFCellStyle. THIN_FORWARD_DIAG |
|
|
HSSFCellStyle. SQUARES |
|
|
HSSFCellStyle. DIAMONDS |
下面使用POI对字体进行设置:
package com.it.poiTest; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class FontTest { public static void main(String[] args) {
try {
XSSFWorkbook workbook = new XSSFWorkbook();
FileOutputStream out = new FileOutputStream("FontSet.xlsx");
XSSFSheet sheet = workbook.createSheet("font set");
sheet.setColumnWidth(1, 3000);
Row row = sheet.createRow(1);
row.setHeight((short) 900);
Cell cell = row.createCell(1);
cell.setCellValue("字体1"); /**
* font设置---设置字体样式
*/
XSSFFont font1 = workbook.createFont();
//设置行高使用HSSFRow对象的setHeight和setHeightInPoints方法,这两个方法的区别在于setHeightInPoints的单位是点,而setHeight的单位是1/20个点,所以setHeight的值永远是setHeightInPoints的20倍。
//设置字号大小
//font1.setFontHeight(20);
//设置字号大小
font1.setFontHeightInPoints((short) 20);
//设置字体
font1.setFontName("Pristina");
//设置加粗
font1.setBold(true);
//设置斜体
font1.setItalic(true);
//设置字体颜色
font1.setColor(IndexedColors.PINK.getIndex());
//或者
//font1.setColor(HSSFColor.YELLOW.index);
XSSFCellStyle style = workbook.createCellStyle();
style.setFont(font1);
cell.setCellStyle(style); /**
* 设置字体角度 顺时针旋转
*/
row = sheet.createRow(2);
row.setHeight((short) 900);
cell = row.createCell(2);
XSSFCellStyle style1 = workbook.createCellStyle();
style1.setRotation((short) 0);
cell.setCellValue("0 'C");
cell.setCellStyle(style1); row = sheet.createRow(3);
row.setHeight((short) 900);
cell = row.createCell(3);
XSSFCellStyle style2 = workbook.createCellStyle();
style2.setRotation((short) 30);
cell.setCellValue("30 'C");
cell.setCellStyle(style2); row = sheet.createRow(4);
row.setHeight((short) 900);
cell = row.createCell(4);
XSSFCellStyle style3 = workbook.createCellStyle();
style3.setRotation((short) 180);
cell.setCellValue("180 'C");
cell.setCellStyle(style3); row = sheet.createRow(5);
row.setHeight((short) 900);
cell = row.createCell(5);
XSSFCellStyle style4 = workbook.createCellStyle();
style4.setRotation((short) 90);
cell.setCellValue("90 'C");
cell.setCellStyle(style4); workbook.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
样式显示如下:

【POI xlsx】使用POI对xlsx的单元格样式进行设置 / 使用POI对xlsx的字体进行设置的更多相关文章
- POI解析Excel时,如何获取单元格样式以及单元格Style的一些操作
最近,公司运营平台需要上传Excel文件并进行解析导入数据库,在开发完成后出现了一个始料不及的生产bug,下面是具体原因: 1.在用POI解析Excel时,默认如果Excel单元格中没有数据,且单元格 ...
- 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?
有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...
- poi的各种单元格样式以及一些常用的配置
之前我做过一个poi到处excel数据的博客,但是,后面使用起来发现,导出的数据单元格样式都不对. 很多没有居中对齐,很多单元格的格式不对,还有就是单元格的大小不对,导致数据显示异常,虽然功能可以使用 ...
- java POI Excel 单元格样式
正如Html需要CSS一样,我们的POI生成的Excel同样需要样式才能更完美的表现我们的数据.下面还是从简单的例子出发,学习和了解POI的样式设计. 一.我的位置. 1 package com.my ...
- 创建excel,合并单元格,设置单元格样式
package com.huawei.excel; import java.io.File;import java.io.FileOutputStream;import java.util.Date; ...
- UITableViewCell 单元格样式
UITableViewCell 单元格样式作用 typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefau ...
- 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法
本篇文章小编为大家介绍,用NPOI创建Excel.合并单元格.设置单元格样式.边框的方法.需要的朋友参考下 今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Ex ...
- 127使用 TableView 自带的单元格样式实现好友列表,另外在单元格中添加辅助按钮
类似的做法如之前这篇随笔:114自定义UITableViewCell(扩展知识:为UITableViewCell添加动画效果) 相比之下:自定义 UITableViewCell 的内容灵活,可根据需求 ...
- NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)
NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 ...
随机推荐
- 转:Java NIO系列教程(一)Java NIO 概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...
- html中table的画法及table和div的区别
最近项目中,根据客户的要求需要在页面上展示各种报表什么的,各种表格的都会出现.这里也将table的画法,做一下总结.办法虽笨但很实用.这也是从高人那里学来的,总之是屡试不爽啊.就以下面的表格为例. 若 ...
- C#集合接口的继承关系图
- C语言运算符优先级和口诀 (转)
一共有十五个优先级: 1 () [] . -> 2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof 3 ...
- poj.2419.Forests (枚举 + set用法)
Forests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5782 Accepted: 2218 Descripti ...
- [BZOJ1998][Hnoi2010]Fsk物品调度
[BZOJ1998][Hnoi2010]Fsk物品调度 试题描述 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置,从0到n-1依次编号,一开 ...
- [BZOJ1941][Sdoi2010]Hide and Seek
[BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...
- Linux 怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用
chmod 755 filename; mv filename /etc/init.d/; chkconfig --add filename #!/bin/bash #chkconfig: 345 8 ...
- HTML前端
1.<html>内容</html> 解释:HTML文档的文档标记,也成为HTML开始标记 功能:这对标记分别位于网页的最前端和最后端 <html>在最前段表示网页的 ...
- 【云计算】docker的小知识,帮你更深入理解容器技术
关于docker的15个小tip 1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu e ...






























