Java使用POI操作Excel学习笔记

1、赋值格式

2、处理日期格式

public void create_Excel() throws Exception{
    Workbook workbook = new HSSFWorkbook(); // 定义一个工作博
    Sheet sheet = workbook.createSheet("第一个Sheet页");    // 创建一个sheet页
    Row row = sheet.createRow(0);   // 创建一个行
    Cell cell = row.createCell(0);  // 创建一个单元格 第1列
    cell.setCellValue(new Date()); // 单元格赋值
    
    // 日期格式化
    CreationHelper creationHelper = workbook.getCreationHelper();   // 创建一个格式化的类
    CellStyle cellStyle = workbook.createCellStyle();   // 单元格样式类
    cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss"));
    cell = row.createCell(1);   // 第二列
    cell.setCellValue(new Date());
    cell.setCellStyle(cellStyle);   // 设置单元格样式
    cell = row.createCell(2);   // 第三列
    cell.setCellValue(Calendar.getInstance());
    cell.setCellStyle(cellStyle);
    
    FileOutputStream fileOut = new FileOutputStream("WebRoot/document/newExcel.xls");
    workbook.write(fileOut);
    fileOut.flush();
    fileOut.close();
    System.out.println("Excel创建完毕");
}

3、整页Excel数据抽取

使用ExcelExtractor抽取工具抽取,默认抽取所有内容,抽取的过程中可以指定过路条件那些不进行抽取,如

extractor.setIncludeSheetNames(false); //  过滤sheet页的名字
public void extrator_Excel() throws Exception {
    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("WebRoot/document/App_User.xls"));
    HSSFWorkbook hwbook = new HSSFWorkbook(fs);
    HSSFSheet hsheet = hwbook.getSheetAt(0); // 获取第一个Sheet页
    ExcelExtractor extractor = new ExcelExtractor(hwbook);
    System.out.println(extractor.getText());
    
    System.out.println("\n———————————————— Excel读取抽取完毕————————————————");
}

4、遍历Excel

/**
 * 读取xls
 */
public void read_Excel() throws Exception {
    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("WebRoot/document/App_User.xls"));
    HSSFWorkbook hwbook = new HSSFWorkbook(fs);
    HSSFSheet hsheet = hwbook.getSheetAt(0); // 获取第一个Sheet页
    if (hsheet != null) {
        // 遍历行Row
        for (int i = 0; i <= hsheet.getLastRowNum(); i++) {
            HSSFRow hrow = hsheet.getRow(i);
            if (hrow != null) {
                // 遍历列Cell
                for (int j = 0; j <= hrow.getLastCellNum(); j++) {
                    HSSFCell hcell = hrow.getCell(j);
                    if (hcell != null) {
                        System.out.print(getValue(hcell) + "   ");
                    }
                }
            }
            System.out.println();
        }
    }
    System.out.println("\n———————————————— Excel读取完毕————————————————");
}
/**
 * 根据单元格类型获取值
 * 
 * @param hcell
 * @return
 */
public String getValue(HSSFCell hcell) {
    if (hcell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
        return String.valueOf(hcell.getBooleanCellValue());
    } else if (hcell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
        return String.valueOf(hcell.getNumericCellValue());
    } else {
        return String.valueOf(hcell.getStringCellValue());
    }
}

单元格对齐

/**
 * 创建Excel单元格
 */
private void createCell(Workbook wb,Row row,short column,Object value,short halign,short valign){
    Cell cell = row.createCell(column); // 创建单元格
    
    if (value instanceof Integer) {
        cell.setCellValue((Integer)value);
    }else if (value instanceof Double) {
        cell.setCellValue((Double)value);
    }else if (value instanceof Boolean) {
        cell.setCellValue((Boolean)value);
    }else if (value instanceof Calendar) {
        cell.setCellValue((Calendar)value);
    }else if (value instanceof Date) {
        cell.setCellValue((Date)value);
    }else {
        cell.setCellValue(value.toString());
    }
    
    CellStyle cellStyle = wb.createCellStyle(); // 创建单元格样式
    cellStyle.setAlignment(halign); // 单元格水平方向对齐
    cellStyle.setVerticalAlignment(valign); // 单元格垂直方向对齐
    cell.setCellStyle(cellStyle);   // 设置单元格样式
}
private void create_Excel() throws Exception {
    Workbook workbook = new HSSFWorkbook(); // 定义一个工作博
    Sheet sheet = workbook.createSheet("第一个Sheet页"); // 创建一个sheet页
    Row row = sheet.createRow(3); // 创建一个行
    row.setHeightInPoints(30);  // 设置行的高度
    createCell(workbook, row, (short)1, "X-rapido", HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_BOTTOM);
    createCell(workbook, row, (short)2, 100, HSSFCellStyle.ALIGN_FILL, HSSFCellStyle.VERTICAL_CENTER);
    createCell(workbook, row, (short)3, true, HSSFCellStyle.ALIGN_LEFT, HSSFCellStyle.VERTICAL_TOP);
    createCell(workbook, row, (short)4, new Date(), HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_CENTER);
    createCell(workbook, row, (short)5, Calendar.getInstance(), HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_BOTTOM);
    
    FileOutputStream fileOut = new FileOutputStream("WebRoot/document/newExcel.xls");
    workbook.write(fileOut);
    fileOut.flush();
    fileOut.close();
    System.out.println("Excel创建完毕");
}

单元格边框处理

Cell cell = row.createCell(1);  // 创建一个单元格
cell.setCellValue("X-rapido");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setBorderLeft(CellStyle.BORDER_THIN); // 设置边框样式
cellStyle.setLeftBorderColor(IndexedColors.BLUE_GREY.getIndex()); // 设置边框颜色
cellStyle.setBorderRight(CellStyle.BORDER_THIN);
cellStyle.setRightBorderColor(IndexedColors.GREEN.getIndex()); 
cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED);
cellStyle.setTopBorderColor(IndexedColors.YELLOW.getIndex());
cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
cellStyle.setBottomBorderColor(IndexedColors.RED.getIndex());
cell.setCellStyle(cellStyle);

单元格填充色和颜色处理

Cell cell = row.createCell(1);  // 创建一个单元格
cell.setCellValue("X-rapido");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillBackgroundColor(IndexedColors.AQUA.getIndex());    // 设置背景色
cellStyle.setFillPattern(CellStyle.BIG_SPOTS);
cell.setCellStyle(cellStyle);
Cell cell2 = row.createCell(2); // 创建一个单元格
cell2.setCellValue("X-rapido");
CellStyle cellStyle2 = workbook.createCellStyle();
cellStyle2.setFillForegroundColor(IndexedColors.RED.getIndex());
cellStyle2.setFillPattern(CellStyle.SOLID_FOREGROUND);
cell2.setCellStyle(cellStyle2);

单元格合并

Cell cell = row.createCell(1);  // 创建一个单元格
cell.setCellValue("X-rapido");
// CellRangeAddress(起始行,结束行,起始列,结束列)
sheet.addMergedRegion(new CellRangeAddress(1, 2, 1, 2));    // 和并列

字体处理

// 创建一个字体处理类
Font font = workbook.createFont();
font.setFontHeightInPoints((short)30);
font.setFontName("Courier New");
font.setItalic(true);   // 斜体
font.setStrikeout(true);    // 删除线
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFont(font);
Cell cell = row.createCell((short)1);
cell.setCellValue("This is test of fonts");
cell.setCellStyle(cellStyle);

读取和重写工作薄

覆盖原有存在的文件

单元格中使用换行

Row row = sheet.createRow(1); // 创建一个行
row.setHeightInPoints(sheet.getDefaultRowHeightInPoints() * 2);
Cell cell = row.createCell((short)1);
cell.setCellValue("我要换行\n成功了吗?");
CellStyle cellStyle = workbook.createCellStyle();
// 设置可以换行
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);

创建用户自定义数据格式

Cell cell;
short rowNum = 0;
short colNum = 0;

row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(111111.25);

style = wb.createCellStyle();
style.setDataFormat(format.getFormat("0.0"));   // 设置数据格式
cell.setCellStyle(style);

row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(111111.25);
style = wb.createCellStyle();
style.setDataFormat(format.getFormat("#.##0.000"));
cell.setCellStyle(style);


赞(52) 打赏
未经允许不得转载:优客志 » JAVA开发
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏