1、常见的java操作Excel API介绍
1.1 Java Aspose Cells
Java Aspose Cells是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布。这个API的最新版本是8.1.2,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读、写和操纵电子表格Excel的组件。此API常见用途如下:
(1)Excel报表,建立动态Excel报表;
(2)从Excel电子表格中导入和导出数据
(3)创建,编辑,转换和电子表格
github介绍:https://github.com/aspose-cells/Aspose.Cells-for-Java
1.2 JExcel
JExcel是由Team Dev开发提供纯行货API。利用这一点程序员可以很容易地读取,写入,显示和修改Excel工作簿中的两种格式:.xls和.XLSX。这个API可以很容易地嵌入Java的Swing和AWT。这个API的最新版本是Jexcel-2.6.12,主要特点如下。
(1)自动化Excel应用程序,工作簿,工作表等
(2)在Java Swing应用程序作为普通的Swing组件嵌入到工作簿
(3)事件侦听器添加到工作簿和电子表格
(4)添加事件处理程序来处理的工作簿和电子表格事件的行为
JExcel官网:http://jexcelapi.sourceforge.net/
1.3 Apache POI
Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel库的所有基本功能。
本篇文章主要介绍利用poi对Excel的操作。
2、POI简介
2.1 Apache POI组件
Apache POI包含类和方法,此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文件。
2.2 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 //错误信息表
3、EXCEL常用操作方法
3.1 得到Excel对象
//得到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();//得到单元格样式
3.2 建立Excel常用对象
//创建Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook();
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.3 设置列宽、行高
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
3.4 保存Excel文件
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
3.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);//上边框
3.6 设置不显示excel网格线
sheet.setDisplayGridlines(false);//其中sheet是Sheet对象
3.7 设置excel单元格中的内容换行
cellStyle.setWrapText(true);
//其中cellStyle是WorkBook创建的CellStyle对象,然后将cellStyle设置到要换行的Cell对象,最后在要换行的对象(一般为字符串)加入"/r/n"。如 topTile.append("/r/n" +"cellContent");
3.8 单元格的合并
sheet.addMergedRegion(new CellRangeAddress(0, 3, 0, 8));//本示例为合并3行8列
4、java代码
使用poi时,需要导入poi的jar,poi-3.15.jar。
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by xxx on 2016/10/28.
* poi-3.15.jar
*/
public class CreateExcel {
public static void main(String[] args) throws IOException {
//**创建工作簿
HSSFWorkbook wb = new HSSFWorkbook();
//1、创建工作表
HSSFSheet sheet = wb.createSheet("商品信息表");
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("商品信息");
//2、标题样式
// 创建单元格样式
HSSFCellStyle cellStyle = wb.createCellStyle();
// 设置单元格的背景颜色为green
cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 设置单元格居中对齐
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置单元格垂直居中对齐
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 创建单元格内容显示不下时自动换行
cellStyle.setWrapText(true);
//3、设置单元格字体样式
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);
}
//模拟数据
List list = new ArrayList();
list.add(new String[]{"1","冠达妙乐滋青汁大麦若叶吐司面包720g 早餐糕点零食","11"});
list.add(new String[]{"2","确悦 iphone7超薄手机硅胶套 苹果7 plus软壳外壳7P防摔保护套4.7","22"});
list.add(new String[]{"3","毛巾架太空铝浴巾架折叠卫生间置物架毛巾杆浴室卫浴五金挂件套装","33"});
///4、内容样式
// 创建单元格样式
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("F:\\test.xls");
if(!file.exists()){
file.createNewFile();
}
//保存Excel文件
FileOutputStream fileOut = new FileOutputStream(file);
wb.write(fileOut);
fileOut.close();
}
}