文章目录
  1. 1. POI结构
  2. 2. 实例
  3. 3. 参考

最近需要在Java程序中读取Excel,于是开始接触POI。

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。

POI结构

  1. HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
  2. XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
  3. HWPF - 提供读写Microsoft Word DOC格式档案的功能。
  4. HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
  5. HDGF - 提供读Microsoft Visio格式档案的功能。
  6. HPBF - 提供读Microsoft Publisher格式档案的功能。
  7. HSMF - 提供读Microsoft Outlook格式档案的功能。

HSSF是指Excel2007年以前的(.xls),XSSF是指2007年版本以上的(.xlsx).

实例

public static List<Integer>  getIds(String filePath) throws IOException {
    ArrayList<Integer> ids = new ArrayList<>();
    if (filePath == null)
        return ids;
    InputStream is = new FileInputStream(filePath);
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

    HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
    if (hssfSheet == null)
        return ids;

    for (int i=1; i<hssfSheet.getLastRowNum(); i++) {
        HSSFRow hssfRow = hssfSheet.getRow(i);
        if (hssfRow == null)
            continue;
        ids.add(getValue(hssfRow.getCell(0)));
    }
    return ids;
}

public static void writeToXLS(List<SongDto> songDtos, String filePath) throws IOException {
    if (songDtos == null || filePath == null)
        return;

    HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
    HSSFSheet sheet = hssfWorkbook.createSheet("song");
    for (int i=0; i<songDtos.size(); i++) {
        HSSFRow row = sheet.createRow(i);
        SongDto songDto = songDtos.get(i);
        for (int j=0; j<4; j++) {
            HSSFCell song_id = row.createCell(0);
            HSSFCell song_name = row.createCell(1);
            HSSFCell singer_name = row.createCell(2);
            HSSFCell status = row.createCell(3);
            song_id.setCellValue(songDto.getId());
            song_name.setCellValue(songDto.getName());
            singer_name.setCellValue(songDto.getSingerName());
            status.setCellValue(songDto.getStatus());
        }
    }

    File file = new File(filePath);
    OutputStream os = new FileOutputStream(file);
    hssfWorkbook.write(os);
    os.close();
}

private static int getValue(HSSFCell cell) {
    if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC)
        return Double.valueOf(cell.getNumericCellValue()).intValue();
    else if (cell.getCellType() == Cell.CELL_TYPE_STRING) 
        return Integer.parseInt(cell.getStringCellValue());
    return 0;
}

上面的实例是:读取Excel第一列的数据到List中,将List中数据写入到Excel。

参考

  1. Apache POI - the Java API for Microsoft Documents
文章目录
  1. 1. POI结构
  2. 2. 实例
  3. 3. 参考