POI 生成 xls 文件使用总结(快速入门)

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非常强大,由于水平有限只能总结这些,但足够平常使用参考。

猜你喜欢

转载自my.oschina.net/u/2930289/blog/1595058