【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.单元格合并 ...
随机推荐
- l来自wentao:项目加入缓存(redis),实时调试时用 -----可视化缓存,flushdb
下文来自segmentfault,网站:一个交流网站:https://segmentfault.com/ 在做一个项目时如果加入缓存(例如redis),我如何进行实时调试呢? 缓存 高并发 架构 gz ...
- centos下使用eclipse jlink 调试uboot
一.安装java jdk 1.CentOS默认情况下,会安装OpenOffice之类的软件,这些软件需要Java的支持,默认会安装JDK的环境,若需要特定的Java环境,最好将默认的JDK彻底删除: ...
- java笔记--关于线程死锁
关于线程死锁 什么是死锁: 在编写多线程的时候,必须要注意资源的使用问题,如果两个或多个线程分别拥有不同的资源, 而同时又需要对方释放资源才能继续运行时,就会发生死锁. 简单来说:死锁就是当一个或多个 ...
- [Effective JavaScript 笔记]第52条:数组字面量优于数组构造函数
js的优雅很大程序要归功于程序中常见的构造块(Object,Function及Array)的简明的字面量语法.字面量是一种表示数组的优雅方法. var a=[1,2,3,5,7,8]; 也可以使用构造 ...
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...
- Sort List
采用归并排序,通过定义快.慢两个指针来找到中点,再采用之前的排序算法进行归并. ListNode *listSort(ListNode *head) { //定义快慢指针,找到链表中心 ListNod ...
- MyEclipse安装JS代码提示(Spket插件)
近期需要大量使用JS来开发,但是MyEclipse2014自带的JS编辑器没有代码提示的功能,开发效率有点低,所以安装了一个Spket的插件,过程非常简单,SVN插件的安装比这个更简单. Spket插 ...
- HDOj 1010 DFS优化
#include<cstdio> #include<cstring> ]={,,,-}; ]={,,-,}; ][]; int x1,y1,x2,y2; int step; i ...
- Centos6.7安装Apache2.4+Mysql5.6+Apache2.4
首先说下思路,因为一开始系统上已经跑了一套完成的 PHP 环境,那时候都是快速自动安装的,如果是跑一些5.3以下版本的话,很简单,几个指令,10分钟搞定了. 但现在要升级,彻底一点的话,唯有推倒重来了 ...
- 绕过 <?PHP exit('Access Denied'); ?> 限制
绕过 <?PHP exit('Access Denied'); ?> 限制 <?php $shellcode='PD9waHBpbmZvKCk7Pz4';// base64_ ...






























