java poi生成excel并修改excel样式

来源:互联网 发布:世纪 时代的正确算法 编辑:程序博客网 时间:2024/04/28 11:57

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;
    }


0 0
原创粉丝点击