首页 > 代码库 > 使用poi导出Excel
使用poi导出Excel
很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。
常见的java Excel API
Java Aspose Cells
Java Aspose Cells 是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布。这个API的最新版本是8.1.2,发布于2014年7月,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读、写和操纵电子表格Excel的组件。此API常见用途如下:
Excel报表,建立动态Excel报表
高保真的Excel渲染和打印
从Excel电子表格中导入和导出数据
生成,编辑,转换和电子表格
JXL
JXL是一款专为Selenium第三方框架,支持基于Web浏览器(数据是Web浏览器自动更新)数据驱动的自动化。然而,它也被用来作为JExcel API的一个共同的支持库,因为它的基本功能是可创建,读取和写入电子表格。基本特征如下:
生成Excel文件
从工作簿和电子表格导入数据
获得行和列的总数
注意:JXL只支持xls档案格式,并且不能处理大数据量。
JExcel
JExcel是由Team Dev开发提供纯行货API。利用这一点程序员可以很容易地读取,写入,显示和修改Excel工作簿中的两种格式:.xls和.XLSX。这个API可以很容易地嵌入Java的Swing和AWT。这个API的最新版本是Jexcel-2.6.12,发布于2009年,主要特点如下。
自动化Excel应用程序,工作簿,工作表等
在Java Swing应用程序作为普通的Swing组件嵌入到工作簿
事件侦听器添加到工作簿和电子表格
添加事件处理程序来处理的工作簿和电子表格事件的行为
添加本地对等开发定制功能
Apache POI
Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。
现在常用的解析excel的API主要有jxl和poi,本文主要研究关于poi的相关知识。
POI简介
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。Apache POI组件
Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。
POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。
HSSF (电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。
XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。
HPSF (属性设置格式) : 它用来提取MS-Office文件属性设置。
HWPF (字处理器格式) : 它是用来读取和写入MS-Word的文档扩展名的文件。
XWPF (XML字处理器格式) : 它是用来读取和写入MS-Word的docx扩展名的文件。
HSLF (幻灯片版式格式) : 它是用于读取,创建和编辑PowerPoint演示文稿。
HDGF (图表格式) : 它包含类和方法为MS-Visio的二进制文件。
HPBF (出版商格式) : 它被用来读取和写入MS-Publisher文件。
HSSF概况
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。POI EXCEL文档结构类
HSSFWorkbook excel文档对象
HSSFSheet excel的sheet HSSFRow excel的行
HSSFCell excel的单元格 HSSFFont excel字体
HSSFName 名称 HSSFDataFormat 日期格式
HSSFHeader sheet头
HSSFFooter sheet尾
HSSFCellStyle cell样式
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
知识体系
EXCEL常用操作方法
1、 得到Excel常用对象POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));
//得到Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook(fs);
//得到Excel工作表对象
HSSFSheet sheet = wb.getSheetAt(0);
//得到Excel工作表的行
HSSFRow row = sheet.getRow(i);
//得到Excel工作表指定行的单元格
HSSFCell cell = row.getCell((short) j);
cellStyle = cell.getCellStyle();//得到单元格样式
2、建立Excel常用对象
HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象
HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
cellStyle = wb.createCellStyle();//创建单元格样式
row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
row.createCell((short)0).setCellValue(1); //设置Excel工作表的值
3、设置列宽、行高
[
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
4、保存Excel文件
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
5、常用单元格边框格式
HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
6.设置不显示excel网格线
sheet.setDisplayGridlines(false);其中sheet是Sheet对象
7.设置excel单元格中的内容换行
cellStyle.setWrapText(true);其中cellStyle是WorkBook创建的CellStyle对象,然后将cellStyle设置到要换行的Cell对象,最后在要换行的对象(一般为字符串)加入"/r/n"。如
topTile.append("/r/n" +"cellContent");
8.单元格的合并
sheet.addMergedRegion(new CellRangeAddress(0, 4, 0, 2));本示例为合并4行2列
示例代码
package com.company.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; public class MergedCells { public static void main(String[] args) throws IOException { //创建工作簿 HSSFWorkbook wb = new HSSFWorkbook(); //创建工作表 HSSFSheet sheet = wb.createSheet("new sheet"); for(int i=0;i<3;i++){ //设置列宽 sheet.setColumnWidth(i, 3000); } //创建行 HSSFRow row = sheet.createRow(0); row.setHeightInPoints(30);//设置行高 //创建单元格 HSSFCell cell = row.createCell(0); cell.setCellValue("用户信息表"); //标题样式 // 创建单元格样式 HSSFCellStyle cellStyle = wb.createCellStyle(); // 设置单元格的背景颜色为淡蓝色 cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 设置单元格居中对齐 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 cellStyle.setWrapText(true); // 设置单元格字体样式 HSSFFont font = wb.createFont(); // 设置字体加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeight((short) 200); cellStyle.setFont(font); // 设置单元格边框为细线条 cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置单元格样式 cell.setCellStyle(cellStyle); //合并单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); HSSFRow row1 = sheet.createRow(1); //标题信息 String[] titles = {"ID","用户名","密码"}; for(int i=0;i<3;i++){ HSSFCell cell1 = row1.createCell(i); cell1.setCellValue(titles[i]); //设置单元格样式 cell1.setCellStyle(cellStyle); } //模拟数据,实际情况下String[]多为实体bean List<String[]> list = new ArrayList<String[]>(); list.add(new String[]{"1","zhangsan","111"}); list.add(new String[]{"2","lisi","222"}); list.add(new String[]{"3","wangwu","333"}); ///内容样式 // 创建单元格样式 HSSFCellStyle cellStyle2 = wb.createCellStyle(); // 设置单元格居中对齐 cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 cellStyle2.setWrapText(true); // 设置单元格字体样式 HSSFFont font2 = wb.createFont(); // 设置字体加粗 font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font2.setFontName("宋体"); font2.setFontHeight((short) 200); cellStyle2.setFont(font2); // 设置单元格边框为细线条 cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //循环赋值 for(int i=0;i<list.size();i++){ HSSFRow row2 = sheet.createRow(i+2); for(int j=0;j<3;j++){ HSSFCell cell1 = row2.createCell(j); cell1.setCellValue(list.get(i)[j]); //设置单元格样式 cell1.setCellStyle(cellStyle2); } } File file = new File("D://a.xls"); if(!file.exists()){ file.createNewFile(); } FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); } }
运行结果
本文简单介绍了poi的相关知识,并主要研究了使用poi导出excel的相关知识,关于使用poi读取excel以及使用poi操作其他office文件,比如doc的相关知识,留待以后研究。
使用poi导出Excel