【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.单元格合并 ...
随机推荐
- 详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
读前小提示:对于深浅复制有一个清楚的了解,对于学习oc的朋友来说,至关重要.那么首先,我们要明白深浅复制是如何定义的呢.这里为了便于朋友们理解,定义如下. 浅 复 制:在复制操作时,对于被复制的对象的 ...
- [实战]MVC5+EF6+MySql企业网盘实战(28)——其他列表
写在前面 本篇文章将实现,其他文件类型的列表. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF ...
- Windows主机里利用VMware安装Linux(CentOS)虚拟机,Host-only连接上网方式详解
关于Host-only指的是主机与虚拟机之间的互联,因此虚拟机是不能连网的,若需要连网则需要使用NAT模式: Host-only模式实现联网得考虑如下配置过程: 附:VMware虚拟机三种网络模式(B ...
- NGUI 学习笔记实战之二——商城数据绑定(Ndata)
上次笔记实现了游戏商城的UI界面,没有实现动态数据绑定,所以是远远不够的.今天采用NData来做一个商城. 如果你之前没看过,可以参考上一篇博客 NGUI 学习笔记实战——制作商城UI界面 ht ...
- Pascal’s Triangle
vector<vector<int>> generate(int num) { vector<vector<int>> result; vector&l ...
- 【leetcode】Palindrome Partitioning II
Palindrome Partitioning II Given a string s, partition s such that every substring of the partition ...
- tesseract3.02识别验证码需要注意的问题
1.安装tesseract3.02后,在命令行里输入tesseract,看能否出现使用方法,不出现则是环境变量问题,可调整其顺序. 2.找到如下文件 C:\Python27\Lib\site-pack ...
- Java for LeetCode 190 Reverse Bits
Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...
- codeforces A. The Wall 解题报告
题目链接:http://codeforces.com/problemset/problem/340/A 这道题目理解不难,就是在[a, b]区间内,找出同时能够被x和y整除的个数.第一次想当然的开了两 ...
- codeforces A. Puzzles 解题报告
题目链接:http://codeforces.com/problemset/problem/337/A 题意:有n个学生,m块puzzles,选出n块puzzles,但是需要满足这n块puzzles里 ...