您的位置:首页 > Web前端 > CSS

java poi生成excel并修改excel样式

2015-06-16 13:16 681 查看
1、poi生成excel 并设置样式

public void writeData(){
try{
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();

// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"model"的工作表,其语句为:
// HSSFSheet sheet = workbook.createSheet("model");

HSSFSheet sheet = workbook.createSheet();

// 在索引0的位置创建行(最顶端的行)
HSSFRow row = sheet.createRow((short)0);

//在索引0的位置创建单元格(左上端)
HSSFCell cell = row.createCell( 0);

                        //设置字体样式
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
// 定义单元格为字符串类型
cell.setCellStyle(cellStyle);

// 在单元格中输入一些内容
cell.setCellValue("增加值12");

                        

                       //循环创建多行

                       for (int i = 1; i <=10; i++){
row = sheet.createRow(i); 
row.createCell(0).setCellValue(i);
}
// 新建一输出文件流
FileOutputStream fileOut = new FileOutputStream("C:\\Users\\dell\\Desktop\\a1.xls");
// 把相应的Excel 工作簿存盘
workbook.write(fileOut);
fileOut.flush();

// 操作结束,关闭文件
fileOut.close();
System.out.println("文件生成...");

}catch(Exception e) {
System.out.println("已运行 xlCreate() : " + e );
}

}

2、需要注意的是,改变原excel(样式、行数、列数等)是需要在workbook.write之后才生效的

3. 设置单元格格式:

在这里,将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:

 

3.1 创建字体,设置其为红色、粗体:

 HSSFFont font = workbook.createFont();

 font.setColor(HSSFFont.COLOR_RED);

 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

 

3.2 创建格式

HSSFCellStyle cellStyle= workbook.createCellStyle();

cellStyle.setFont(font);

 

3.3应用格式

HSSFCell cell = row.createCell((short) 0);

cell.setCellStyle(cellStyle);

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

cell.setCellValue("标题 ");

4.POI中Excel文件单元格的类型

在读取每一个单元格的值的时候,通过getCellType方法获得当前单元格的类型,在Excel中单元格有6种类型,如下所示。

1)CELL_TYPE_BLANK :空值

2)CELL_TYPE_BOOLEAN :布尔型

3)CELL_TYPE_ERROR : 错误

4)CELL_TYPE_FORMULA :公式型

5)CELL_TYPE_STRING:字符串型

6)CELL_TYPE_NUMERIC:数值型

如果单元格的Type为CELL_TYPE_NUMERIC时,还需要进一步判断该单元格的数据格式,因为它有可能是Date类型,在Excel中的Date类型也是以Double类型的数字存储的。Excel中的Date表示当前时间与1900年1月1日相隔的天数,所以需要调用HSSFDateUtil的isCellDateFormatted方法,判断该单元格的数据格式是否是Excel Date类型。如果是,则调用getDateCellValue方法,返回一个Java类型的Date。

因此读取Excel中单元格中的数据时,得判断单元格格式类型,这是我写的,参考一下:

private Object getCellData(Cell cell, FormulaEvaluator formula) {

    if(cell == null) {

        return null;

    }

    switch (cell.getCellType()) {

    case Cell.CELL_TYPE_STRING:

        return cell.getRichStringCellValue().getString();

    case Cell.CELL_TYPE_NUMERIC:

        if (DateUtil.isCellDateFormatted(cell)) {

            return cell.getDateCellValue();

        } else {

            return cell.getNumericCellValue();

        }

    case Cell.CELL_TYPE_BOOLEAN:

        return cell.getBooleanCellValue();

    case Cell.CELL_TYPE_FORMULA:

        return formula.evaluate(cell).getNumberValue();

    default:

        return null;

    }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息