POI眼中的xls文件结构
| - workbook
| ---- sheet
| ------- row
| ---------- cell
workbook就相当于xls文件(在excel中称之为工作簿),一个workbook(工作簿)里可以有多个sheet(工作表),每个工作表里又分为多个row(行),而每个行中又有很多cell(单元格)。
创建一个xls文件的一般步骤
public class Demo {
public static void main(String[] args) {
// 1. 创建workbook
HSSFWorkbook workbook = new HSSFWorkbook();
// 2. 创建工作表
HSSFSheet sheet = workbook.createSheet("我是第一个工作表");
// 3. 创建行
HSSFRow row = sheet.createRow(0);
// 4. 创建单元格
HSSFCell cell = row.createCell(0);
// 5. 为单元格设置内容
cell.setCellValue("这是A1单元格");
// 6. 所有内容设置完毕,导出xls文件
try {
FileOutputStream fileOutputStream = new FileOutputStream("F:/demo.xls");
workbook.write(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
更多的可能性
为单元格设置样式(边框,字体,对齐,颜色,自动换行等)
HSSFCellStyle cellStyle = workbook.createCellStyle();
// 设置上下左右边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置字体
HSSFFont cellFont = workbook.createFont();
cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
cellFont.setFontName("微软雅黑"); // 字体
cellFont.setFontHeightInPoints(((short) 12)); // 字号
cellFont.setColor(HSSFColor.BLUE.index); // 颜色
// 将字体绑定到样式中
cellStyle.setFont(cellFont);
// 设置对齐方式
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置单元格颜色
cellStyle.setFillForegroundColor(HSSFColor.RED.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 设置自动换行
cellStyle.setWrapText(true);
// 为单元格设置样式
cell.setCellStyle(cellStyle);
颜色样式具体参见:http://blog.csdn.net/hantiannan/article/details/5312133
特别注意:如文章中的颜色为HSSFColor.RED
,参数需要传入HSSFColor.RED.index
为xls文件设置列宽和行高
// 设置列宽
sheet.setColumnWidth(0, 20 * 256);
// 设置行高
row.setHeightInPoints(92f);
其中行高可以使用上面的函数,参数为像素值。
但列宽没有提供设置像素值的参数,该函数的第一个参数表示列号(从0开始),第二个参数的单位是1/256个字符宽度,如上面代码,则列宽为20个字符的宽度。
合并单元格
CellRangeAddress cra = new CellRangeAddress(1, 3, 1, 6);
sheet.addMergedRegion(cra);
其中第一个参数表示开始行,第二个参数表示结束行,第三个参数表示开始列,第四个参数表示结束列
设置超链接
工作簿内的超链接
// 添加超链接
HSSFHyperlink hyperlink = new HSSFHyperlink(Hyperlink.LINK_DOCUMENT);
hyperlink.setAddress("#" + "我是第一个工作表" + "!B1"); // # 后跟 表名, ! 后跟 单元格位置
cell.setHyperlink(hyperlink);
// 设置超链接样式
HSSFCellStyle hyperStyle = sheet.getWorkbook().createCellStyle();
HSSFFont hyperFont = workbook.createFont();
hyperFont.setUnderline((byte) 1);
hyperFont.setColor(HSSFColor.BLUE.index);
hyperFont.setFontName("微软雅黑");
hyperFont.setFontHeightInPoints(((short) 12));
hyperStyle.setFont(hyperFont);
cell.setCellStyle(hyperStyle);
url超链接
// 代码片段,全部请仿照 工作簿内的超链接 代码
HSSFHyperlink hyperlink = new HSSFHyperlink(Hyperlink.LINK_URL);
hyperlink.setAddress("http://www.baidu.com"); // url
其他
还支持email和文件,这里就不介绍了。
以上是本次使用时的总结,POI非常强大,由于水平有限只能总结这些,但足够平常使用参考。