POI文档导出(java)

news/2024/7/21 5:40:41 标签: java, poi, css, excel

javaPOI_0">基于java的POI

java在很多的方面都有很多引用,尤其是最近一俩年,java的运用无处不在。很多情况下,我们需要导出一些表格或者其他文档,而程序环境是在java语言下的,那么,Apache提供了解决途径——POI。


文章目录

  • 基于java的POI
  • 前言
  • 一、POI结构
  • 二、官方网址
  • 三、常用类说明
    • Excel依赖关系
  • 四、使用说明
  • 五、合并单元格
  • 六、设置单元格格式
    • 常用样式
    • 常用枚举类
    • 设置时间格式化
    • 设置单元格宽和高
      • 1.设置默认宽和高
      • 2.指定某行列/行宽高
      • 3.代码示例
    • 合并单元格样式
  • 完结


前言

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。


提示:以下是本篇文章正文内容,下面案例可供参考

一、POI结构

模块功能
HSSF提供读写Microsoft Excel XLS格式档案的功能 (Excel 2003)
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能(Excel 2007+)
HWPF提供读写Microsoft Word DOC格式档案的功能
HSLF提供读写Microsoft PowerPoint格式档案的功能
HDGF提供读Microsoft Visio格式档案的功能
HPBF提供读Microsoft Publisher格式档案的功能
HSMF提供读Microsoft Outlook格式档案的功能

二、官方网址

Apache


官网首页示意图:
Apache官网首页

三、常用类说明

类名说明
HSSFWorkbookExcel的文档对象
HSSFSheetsheet页
HSSFRowExcel的行
HSSFCellExcel的格子单元
HSSFFontExcel字体
HSSFDataFormat格子单元的日期格式
HSSFCellStyle格子单元样式

Excel依赖关系

Excel的创建过程:

  1. 创建文档对象
  2. 创建Sheet页
  3. 在该Sheet也上创建Row
  4. 在该Row上创建Cell
  5. 对该Cell进行CellStyle样式渲染

四、使用说明

生成Excle的基础示例:

java">//创建文档对象
Workbook wb = new HSSFWorkbook();
//创建一个名叫 demo1 的sheet页
Sheet st=wb.createSheet("demo1");
//在当前页创建一行参数为行的下标从0开始
Row row=st.createRow(0);
//在当前行中插入列参数为列的下标从0开始
Cell cell=row.createCell(0);
cell.setCellValue("张三");

row.createCell(1).setCellValue(12);
row.createCell(2).setCellValue(56.5);
row.createCell(3).setCellValue(newDate());

//调用文档对象的write方法将内容通过输出流输出到指定文件最后关闭流
wb.write(new FileOutputStream("D:/测试.xls"));
wb.close();

五、合并单元格

POI提供了转门用于合并单元格的类CellRangeAddress

使用示例:

java">//需求:现在要合并 2-4行 1-5列的单元格
//先将合并单元格中的的首行首列创建出来
Row row=st.createRow(1);//创建第二行
Cell cell=row.createCell(0);//创建第一列
cell.setCellValue("合并单元格");//设置单元格内容
/*
开始合并单元格
使用 CellRangeAddress(firstRow, lastRow, fristCell, lastCell)
四个参数表示要合并单元格的 起始行 结束行 起始列 结束列
*/
CellRangeAddress cra=new CellRangeAddress(1, 3, 0, 4);
//将合并后单元格加入当前sheet页
st.addMergedRegion(cra);

普通单元格和合并后的单元格在Excel中并不是同一个管理对象
对其进行样式设置等方式需要区别对待

六、设置单元格格式

使用CellStyle对象来进行单元格样式设置
获取方式:
CellStylecs=wb.createCellStyle();

常用样式

java">//设置样式 -- 获取样式对象
HSSFCellStyle style=workbook.createCellStyle();

//设置背景色
cs.setFillForegroundColor(HSSFColorPredefined.YELLOW.getIndex());
//设置填充样式此项必选否则有时无法显示背景色
cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);

//设置底边框;  通过BorderStyle枚举 设置边框类型
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;  通过HSSFColorPredefined枚举类获取内置颜色
style.setBottomBorderColor(HSSFColorPredefined.BLACK.getIndex());
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;  也可以通过IndexedColors枚举类获取内置颜色
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
//设置自动换行;
style.setWrapText(true);
//设置水平对齐的样式为居中对齐;  参数通过HorizontalAlignment枚举获取
style.setAlignment((short) horAlignment);
//设置垂直对齐的样式为居中对齐;  参数通过VerticalAlignment枚举获取
style.setVerticalAlignment((short) verAlignment);
// 设置字体 -- 字体需要单独设置使用HSSFFont对象
HSSFFont font=workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short)fontSize);
//字体加粗
font.setBoldweight((short) fontWeight);
//设置字体名字
font.setFontName(fontName);
//在样式用应用设置的字体;  
style.setFont(font);	

常用枚举类

枚举类型说明
HSSFColorPredefined获取内置颜色 excel2003
IndexedColors获取内置颜色excel2007+
BorderStyle设置边框类型
HorizontalAlignment设置水平对齐方式
VerticalAlignment设置垂直对其方式
FillPatternType背景填充方式常用FillPatternType.SOLID_FOREGROUND

设置时间格式化

通过CreationHelper对象来设置格式化模式串

java">//设置一列
Cell cell=row.createCell(0);
//设置该列的值为 Date类型
cell.setCellValue(newDate());
//开启样式对象
CellStyle css=wb.createCellStyle();
//通过 WorkBook 获取 CreationHelper 对象
CreationHelper ch=wb.getCreationHelper();
// 利用CreationHelper对象设置日期格式化模式串并传递给样式对象
css.setDataFormat(ch.createDataFormat().getFormat("yyyy-MM-dd"));
//设置当前单元格的样式
cell.setCellStyle(css);

设置单元格宽和高

1.设置默认宽和高

java">/**
 * 设置单元格默认的宽度;整个 Sheet 中单元格的宽度都将被修改;方法来自 Sheet 接口
 * @param width 宽度值;单位是 1/256 个字符宽度,即值建议设置为256的倍数
*/
  public void setDefaultColumnWidth(int width);
/**
  *设置单元格默认的高度;整个 Sheet 中单元格的高度都将被修改;方法来自 Sheet 接口
  *   @param height 高度值;单位是 1/20 个点,即值建议设置为20的倍数
*/
public void setDefaultRowHeight(short height);

2.指定某行列/行宽高

java">/**
	*设置指定单元格的宽度;单元格的宽度即列的宽度;方法来自 Sheet 接口
	* @param columnIndex 列的索引;值从 0 开始
	* @param width 宽度值;单位是 1/256 个字符宽度,即值建议设置为256的倍数
	*/
public void setColumnWidth(int columnIndex, int width);
/**
	*设置指定单元格的高度;单元格的高度即行的高度;方法来自 Row 接口
	* @param height 高度值;单位是 1/20 个点,即值建议设置为20的倍数
*/
public void setHeight(short height);
/**
	*设置指定单元格的高度;与 setHeight() 作用一致,但参数单位不同;方法来自 Row 接口
	* @param height 高度值;单位是 1 整个点
*/
public void setHeightInPoints(float height);

3.代码示例

java">// 创建一个Sheet对象
Workbook workbook=new HSSFWorkbook();
Sheet sheet=workbook.createSheet("sheet");

// 设置第一列的宽度 10个字符长度
sheet.setColumnWidth(0, 10*256);
// 设置第一行的高度 30个点
Rowrow=sheet.createRow(0);
row.setHeight((short) (30*20));
row.setHeightInPoints((short) 30);

// 设置默认的宽和高
sheet.setDefaultColumnWidth(100*256);
sheet.setDefaultRowHeight((short) (30*20));

合并单元格样式

在POI中对于合并单元格有特殊处理方式,合并后的单元格和普通单元格的类型是不同的

针对于合并单元格的普通样式设置,只需要对该合并单元格所对应的首行首列单元格进行设置即可

但如果要给合并单元格添加边框则需要调用 RegionUtil 类做特殊处理,如下所示:

java">//设置上边框样式 cra为单元格对象CellRangeAddress st为当前Sheet对象
RegionUtil.setBorderTop(BorderStyle.THIN,cra,st);
//设置下边框样式
RegionUtil.setBorderBottom(BorderStyle.THIN,cra,st);
//设置左边框样式
RegionUtil.setBorderLeft(BorderStyle.THIN,cra,st);
//设置有边框样式
RegionUtil.setBorderRight(BorderStyle.THIN,cra,st);

完结


http://www.niftyadmin.cn/n/1780325.html

相关文章

我的备忘录scala点滴知识记录

为什么80%的码农都做不了架构师?>>> 1.String 插入引用(需要在引用的变量前增加 s 标识) val name"jiang" val infos"i am $name" info: String i am jiang val age019 val str1s"i am ${age0 1} years old" str1: Str…

PLSQL_基础系列12_替换函数用法REPLACE / TRANSLATE / REGEXP_REPLACE

20150806 Created By BaoXinjian 一、摘要 1. Translate (1). 语法:TRANSLATE(char, from, to) (2). 用法: 返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。 若from比to字符串长,那么在from中比to中多出的字符将会被删除。 …

01.移动先行之谁主沉浮----我的第一个程序

如果移动方向有任何问题请参考> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接>(点) 添加项目 看看项目,和以前大不同了,很多东西都用不了了&#…

ASP.NET MVC开发微信(一)

public string index() {return Content(""); } 转载于:https://www.cnblogs.com/tq1226112215/p/4178186.html

Maven的详细使用

前言 随着前后端的分离,集成框架收到了大众的喜爱,像springboot,maven,gradle等,本章主要介绍了maven的框架的搭建,csdn所有文章最详细没有之一。 文章目录前言Maven简介一、Maven的安装及整合1. 下载Mave…

hibernate AOP

摘自:http://pandonix.iteye.com/blog/336873/ 此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题。最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP 来解决。一方面是为了以更加灵活的…

Junit的使用

Junit的使用 JUnit 是一个Java编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于JUnit 的一个统称为xUnit 的单元测试框架之一。 文章目录Junit的使用一、Junit使用的一些建议测试代码和项目代码分开二、测试失败的两种情况三、Junit的运…

php网页重定向的实现方法

2019独角兽企业重金招聘Python工程师标准>>> php网页重定向的实现方法 1、header("Location: http://www.baidu.com"); //Location:之后有“空格”2、echo "<script>window.location " 3、echo "<METAHTTP-EQUIV\"Refresh\…